【问题标题】:Multiple Yajl parser objects vs a single global parser object多个 Yajl 解析器对象与单个全局解析器对象
【发布时间】:2012-02-23 04:23:05
【问题描述】:

在 rails 3.2.1 中工作,我正在开发一个应用程序,该应用程序执行大量 JSON 请求并使用 Yajl 解析返回的数据。我的困境是每次请求 JSON 数据时是否要初始化 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 解析数据的请求将在大部分页面请求上发出,因此该实现提供了最佳性能。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.2 yajl


    【解决方案1】:

    简单地使用Yajl::Parser.parse json_string 有什么问题?在这种情况下应该不会有太大的不同。

    【讨论】:

    • 我的想法是通过创建一个常量或不断重用一个初始化的对象,我的应用程序可能会提高性能,因为该对象可能会被缓存在内存中,但我不明白的方向Ruby 或 Ruby on Rails 足以做出明智的决定。
    • 自从采用 Ruby on Rails 以来,我经常有类似的问题,我在学校期间做了几个学期的 HPC 工作,我非常想更好地了解 Ruby 如何处理内存管理,特别是在 Ruby on Rails 应用程序的上下文中。
    • 嗯,我很少使用 Ruby on Rails,但如果您对 Ruby 如何处理内存检查感兴趣 this presentation;如果您使用 YARV,它可能与演示文稿略有不同。 Yajl::Parser 已经是一个常量,您将parse 发送到该常量。
    • 非常有帮助!根据我使用标准 Ruby 1.87 解释器收集的信息,初始化一个对象会稍微高效一些,该对象在需要时通过调用 Yajl::Parser.parse json_string 来重用。我的想法是 1.87 实现充其量是绿色线程,这将防止每次调用 Yajl::Parser.parse json_string 时都需要清理 yajl::Parser 对象。
    • 我在 YARV 中找不到任何关于内存管理的好帖子/文档/演示文稿(不幸的是,因为我也想了解它们)。发送parseYajl::Parser 或它的一个实例之间的性能差异是微不足道的。实例版本可能会稍微快一些,但不太方便。
    猜你喜欢
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 2017-09-13
    • 2011-05-11
    • 1970-01-01
    相关资源
    最近更新 更多