主要观点:作者成为json gem 的维护者后,专注于提升其性能,使其成为 Ruby 上最快的 JSON 解析器和生成器。
关键信息:
oj虽速度快但常引起问题,如通过猴子补丁Oj.mimic_JSON和Oj.optimize_rails可能导致安全问题和序列化差异,且oj易引发 Ruby 崩溃。- 作者通过设置基准测试套件,使用
samplyprofiler 找出性能瓶颈并进行优化。 - 优化措施包括避免冗余检查(如优化
convert_UTF8_to_JSON_ASCII函数)、先检查更便宜更可能的条件(如优化fbuffer_inc_capa函数)、减少设置成本(如恢复 Mame 的部分优化)、避免追指针(如优化enc_utf8_compatible_p函数)、使用查找表(如优化字符串转 JSON 的过程)等。
重要细节: - 字符串有
coderange属性,可减少编码扫描次数,如rb_enc_str_asciionly_p函数利用该属性。 - 现代 CPU 是“超标量”的,可根据条件猜测执行路径,如利用
RB_LIKELY和RB_UNLIKELY指导 CPU 执行。 - Mame 的优化措施在微基准测试中效果显著,如减少
JSON.generate的设置成本等。 - 查找表通过预计算静态数组来加速字符串转 JSON 的过程。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。