動かざることバグの如し

近づきたいよ 君の理想に

Rubyの高速JSONパーサーojは本当に高速なのか

rubyJSONをパースするときはJSON.parseが一般的だがojライブラリを使ったほうが速いらしい。

ohler55/oj: Optimized JSON

A fast JSON parser and Object marshaller as a Ruby gem.

が、このライブラリ自体は結構昔からあるし、Ruby 2.5時代でも本当に有能なのか実際にベンチマークしてみた

やりかた

いいソースコードがあったのでこれを使った。

github.com

ただしGemfileが不足しているので

gem "yajl-ruby"                                                                                                                             

Gemfileに追記する必要がある。

結果

$bundle exec ruby benchmark_json.rb 
=== dumping ===
                      user     system      total        real
OJ:               1.036272   0.148676   1.184948 (  1.192646)
OJc:              1.290457   0.166344   1.456801 (  1.467624)
OJr:              1.341350   0.129613   1.470963 (  1.482770)
Yajl:             4.224447   0.130227   4.354674 (  4.383445)
JSON:             6.937912   0.196359   7.134271 (  7.349190)
to_json:          6.871794   0.243478   7.115272 (  7.507943)
JSON (mimic):     1.444729   0.131286   1.576015 (  1.612629)
to_json (mimic):  7.461746   0.250444   7.712190 (  8.516543)
to_json (Oj):     6.879305   0.213003   7.092308 (  7.569498)

あ、普通にOJ速かったわ。疑ってすまねえ

結論

でかいJSONをパースする、レスポンス重視の場合はoj使っていこう