【问题标题】:How to get faster YAML loading in Ruby 1.8.7?如何在 Ruby 1.8.7 中更快地加载 YAML?
【发布时间】:2012-07-06 20:36:32
【问题描述】:

在这个 Ruby 1.8.7 应用程序中,需要 YAML 反序列化(使用 YAML.load 完成),因为现有数据存储在许多相对较小的 YAML 文档中,但这是一个性能瓶颈。

有没有更好的方法或库?升级到 ruby​​ 1.9 不是一种选择。

【问题讨论】:

  • 您是否使用了 yaml 中的许多特殊功能(自定义类型、锚点、别名)?如果不是,也许您可​​以将您的 yaml 文档映射到 JSON,然后解析 json。虽然听起来很老套
  • 无特殊功能。这是一个有趣的想法。
  • 您已经检查过 CPU,而不是 I/O,是瓶颈,对吧?
  • 是的,因为我只计时了 YAML.load 调用,其中传递的参数是一个已经加载到内存中的字符串。

标签: ruby performance serialization yaml


【解决方案1】:

我不是专家,但如果您可以将 YAML 文档转换为 Marshal 文档,然后在应用程序中使用 Marshal.load,它应该会快得多。我使用this gist 来比较 YAML 与 Marshal 的性能。

【讨论】:

【解决方案2】:

我没有找到方法来做到这一点。我尝试过通过字符串操作将 YAML 转换为 JSON,然后使用 Yajl 和 OJ 等快速 JSON 解析器对其进行解析,但是将 YAML 转换为 JSON 的开销已经比实际解析 YAML 更长。

如果聪明的人真的花很多时间来做这件事,我的转换脚本可能不会那么快,但我很早就放弃了,因为我意识到即使我优化了自己的脚本,它仍然不会没有明显超过 YAML 解析时间来保证整个方法。

【讨论】:

    【解决方案3】:

    根据this experiment,在1.8.7下使用ZAML会比YAML解析器快。

    【讨论】:

    • ZAML 只提供dump 方法,而我只对load 方法感兴趣。
    猜你喜欢
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 2021-09-21
    相关资源
    最近更新 更多