RubyでJSONの変換速度を改善する
※本記事は自鯖Blogの転載です
※元記事は2013/05/01に書かれました
http://blog.parrot-studio.com/2013/05/yajl-ruby/
正直、普段はRuby標準*1のjsonを使っていれば十分なのですが、
さすがに仕事のシステムとなると、
モデルをJSONに変換するコストが問題になるケースがあります
もちろん、最初からJSONのコストが問題になったのではなく、
チューニングをかけていったらそこに行き当たった、ということなのですが、
とにかく0.1秒単位で削らないといけなかったので困りました(´-ω-)
そこで軽く調べてみたところ、こちらの情報に行き当たりました
Rails3でMultiJsonのBackendをyajlに変更してJSONのエンコード/デコードのパフォーマンスを改善する - ( ꒪⌓꒪) ゆるよろ日記
https://github.com/brianmario/yajl-ruby
この「yajl」を「yajl-ruby」経由で使うことにより、
かなりのパフォーマンス改善が見込めます(`・ω・´)
ただ、私が仕事でやっているシステムはPadrinoで、
しかもMultiJsonも使ってなかったので、
記事の通りにはできなかったのですが・・・
# Gemfile gem 'yajl-ruby', :require => 'yajl/json_gem'
# config/boot.rb # bundlerの読み込みあたり module ActiveSupport module JSON def self.encode(value, options = nil) hash = ActiveSupport::JSON::Encoding::Encoder.new(options).as_json(value) Yajl::Encoder.encode(hash) end end end
・・・こんな感じにしました...φ(・ω・`)
「:require => 'yajl/json_gem' 」を使うと、標準json互換になる代わりに、
(おそらくは)多少パフォーマンスが犠牲になりますが、
仕事のシステムで標準から外れすぎると、後々メンテが面倒なので・・・
あと、yajl-ruby同士で送受信する場合はいいのですが、
別な環境に対して提供する場合、
標準のjsonとフォーマットが異なる場合があります*2
JSONを使うということは他システムとの連携を前提としている可能性が高く、
単純に置き換えればOKというものではないので、くれぐれもテストは慎重に
というか、使わなくていいならそれが一番いいのですが(´・ω・`) *3