主要观点:作者成为json
gem 的维护者后,专注于提升其性能,使其成为 Ruby 上最快的 JSON 解析器和生成器。
关键信息:
oj
虽速度快但常引起问题,如通过猴子补丁Oj.mimic_JSON
和Oj.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_LIKELY
和RB_UNLIKELY
指导 CPU 执行。 - Mame 的优化措施在微基准测试中效果显著,如减少
JSON.generate
的设置成本等。 - 查找表通过预计算静态数组来加速字符串转 JSON 的过程。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。