2012-02-23 60 views
1

在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解析数据的请求将在大部分页面请求中进行,该实现提供了最佳性能。

回答

0

简单地使用Yajl::Parser.parse json_string有什么问题?在这方面它应该没有多大的区别。

+0

我的想法是通过创建一个常量或不断重复使用一个初始化对象,我的应用程序可能会实现性能的提高,因为该对象可能会被缓存在内存中,但我不明白Ruby或Ruby on Rails的方向足以做出明智的决定。 – rudolph9 2012-03-15 23:04:07

+0

自从我采用Ruby on Rails以来,我经常遇到类似的问题,我在学校做了几个学期的HPC工作,我非常想更好地理解Ruby如何处理内存管理,特别是在Ruby的上下文中在Rails应用程序上。 – rudolph9 2012-03-15 23:08:19

+1

嗯,我很少与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