优化 Ruby 的 JSON,第 1 部分

主要观点:作者成为json gem 的维护者后,专注于提升其性能,使其成为 Ruby 上最快的 JSON 解析器和生成器。
关键信息

  • oj虽速度快但常引起问题,如通过猴子补丁Oj.mimic_JSONOj.optimize_rails可能导致安全问题和序列化差异,且oj易引发 Ruby 崩溃。
  • 作者通过设置基准测试套件,使用samply profiler 找出性能瓶颈并进行优化。
  • 优化措施包括避免冗余检查(如优化convert_UTF8_to_JSON_ASCII函数)、先检查更便宜更可能的条件(如优化fbuffer_inc_capa函数)、减少设置成本(如恢复 Mame 的部分优化)、避免追指针(如优化enc_utf8_compatible_p函数)、使用查找表(如优化字符串转 JSON 的过程)等。
    重要细节
  • 字符串有coderange属性,可减少编码扫描次数,如rb_enc_str_asciionly_p函数利用该属性。
  • 现代 CPU 是“超标量”的,可根据条件猜测执行路径,如利用RB_LIKELYRB_UNLIKELY指导 CPU 执行。
  • Mame 的优化措施在微基准测试中效果显著,如减少JSON.generate的设置成本等。
  • 查找表通过预计算静态数组来加速字符串转 JSON 的过程。
阅读 7
0 条评论