以下はNetflixが公開した、Fast JSON API serialization with Ruby on Railsの日本語訳です。
私はRubyはRuby Associationシルバーを持ってる程度で、RoRはまともに使ったことがなくて知識皆無なので、誤りがある可能性が大です。
Fast JSON API serialization with Ruby on Rails
著:Shishir Kakaraddi・Srinivas Raghunathan・Adam Gross・Ryan Johnston
RoRアプリケーション向けの、超絶速いFast JSON APIのgemを公開しました。
Introduction
Fast JSON APIは、Active Model Serializer(AMS)が提供している主な機能を提供しつつ、パフォーマンスの改善を目的に開発されました。
このgemは、パフォーマンステストのベンチマークにおいてAMSより25倍高速に動作しました。
AMSは偉大なgemであり、Fast JSON APIも、その構文や機能はAMSに深い影響を受けています。
しかし、AMSはモデルにひとつ以上のリレーションがあると動作が遅くなってしまいます。
Compound Documentsが存在するとAMSはさらに遅く、目に見えるほどの影響が現れてきます。
Why optimize serialization?
JSONのシリアライズは、しばしばRoRのAPIの実装の中で最も動作が遅いところのひとつです。
ならば、AMSが提供しているものと同等の機能を提供しつつ、速度を上げていかない理由はありません。
Features
・Active Model Serializerに似た構文
・belongs_to、has_many、has_oneをサポート
・Compound Documentsをサポート
・Compound Documentsのシリアライズを最適化
・キャッシュ機能
・Skylightによるパフォーマンス測定(オプション)
How do you write a serializer using Fast JSONAPI?
Fast JSONAPIはどうやって使えばいい?
みんなが使い慣れているであろうActive Model Serializersに近い使い方ができます。
fast_jsonapiの宣言はAMSに似ています。
class MovieSerializer
include FastJsonapi::ObjectSerializer
attributes :name, :year
has_many :actors
belongs_to :owner, record_type: :user
belongs_to :movie_type
end
How fast is it compared to Active Model Serializers?
どれだけ速くなった?
パフォーマンステストではAMSより25から40倍以上高速に動作しました。
さらに、複雑なモデルにおいてもシリアライズにかかる時間は無視できる程度になりました。
シリアライズするレコードの数が増加すると、パフォーマンスはさらに向上します。
信じられませんか?
自分でベンチマークを実行することもできます。
Readmeを参照してください。
Dependency
JSON APIはanti-bikesheddingなツールです。
Future Work
今後は、さらに多くの機能を追加する予定です。
提案、改善、修正、追加テストを歓迎します。
感想
json_encode最高。
anti-bikesheddingの意味がよくわからなかった。
依存なんてどうでもいいことを気にするんな、とかそういうこと?