多个Yajl解析器对象与单个全局解析器对象
问题描述:
在rails 3.2.1中工作时,我构建了一个应用程序,该应用程序执行大量JSON请求并使用Yajl解析返回的数据。我的困境是天气或不是每一个JSON数据请求时初始化Yajl解析器对象:多个Yajl解析器对象与单个全局解析器对象
json = StringIO.new(some_jason_object)
#hmm I need something to parse this json data
parser = Yajl::Parser.new
hash = parser.parse(json)
或初始化解析器config/initializers/yajl_parser.rb
一个全局常量PARSER = Yajl::Parser.new
和我的应用程序中调用它,如下所示:
json = StringIO.new(some_jason_object)
hash = PARSER.parse(json)
鉴于需要Yajl解析数据的请求将在大部分页面请求中进行,该实现提供了最佳性能。
答
简单地使用Yajl::Parser.parse json_string
有什么问题?在这方面它应该没有多大的区别。
我的想法是通过创建一个常量或不断重复使用一个初始化对象,我的应用程序可能会实现性能的提高,因为该对象可能会被缓存在内存中,但我不明白Ruby或Ruby on Rails的方向足以做出明智的决定。 – rudolph9 2012-03-15 23:04:07
自从我采用Ruby on Rails以来,我经常遇到类似的问题,我在学校做了几个学期的HPC工作,我非常想更好地理解Ruby如何处理内存管理,特别是在Ruby的上下文中在Rails应用程序上。 – rudolph9 2012-03-15 23:08:19
嗯,我很少与Ruby on Rails合作,但是如果您对Ruby如何处理内存检查感兴趣,请查看[此演示文稿](http://timetobleed.com/garbage-collection-slides-from-la-ruby-conference /);如果您使用YARV,它可能与演示文稿稍有不同。 'Yajl :: Parser'已经是一个常数,你发送'parse'。 – omninonsense 2012-03-17 01:50:14