最初に (tl;drなんて言わないぞ)
結論からいうとJSONの方が10倍速かった。
概要
基本的にマスタデータはYAMLで管理するようにしているのだけれどなぜかJSONでプルリク貰ってイライラしながらベンチとって証拠にしようとしたら予想と逆だった。一定以上のサイズになるとYAMLが逆転するものだと思っていた。
ベンチ結果
以下のようなファイルを読み込む。
➜ ls -lh story.yml story.json 2.1.2 11:30:20 -rw-r--r-- 1 tomohiro staff 13K 7 17 11:15 hoge.json -rw-r--r-- 1 tomohiro staff 11K 7 17 11:15 hoge.yml
結果は以下のようになった。JSONの方が10倍くらい速い。圧倒的過ぎてなんとも言えない。
Rehearsal ---------------------------------------- JSON 0.040000 0.000000 0.040000 ( 0.038241) YAML 0.380000 0.000000 0.380000 ( 0.382941) ------------------------------- total: 0.420000sec user system total real JSON 0.030000 0.010000 0.040000 ( 0.032264) YAML 0.370000 0.000000 0.370000 ( 0.368527)
ファイルサイズを増やして1MB以上のファイルで試したところ以下のようになった。 よりYAMLが遅くなっている。全然認識と違って調べて良かったという感じ。
Rehearsal ---------------------------------------- JSON 4.270000 0.200000 4.470000 ( 4.485176) YAML 44.640000 0.310000 44.950000 ( 44.982451) ------------------------------ total: 49.420000sec user system total real JSON 4.240000 0.300000 4.540000 ( 4.537489) YAML 43.530000 0.340000 43.870000 ( 43.896849)
以下のコードでベンチ取った。
require "benchmark" require "oj" require "psych" Benchmark.bmbm do |x| x.report("JSON") { 100.times { Oj.load(File.open("hoge.json")) } } x.report("YAML") { 100.times { Psych.load(File.open("hoge.yml")) } } end
oj はなんか速いやつ ( see also: https://github.com/ohler55/oj )