Ruby
Gem
RubyOnRails
戸田奈津子訳

RoRでちょー速いJSONシリアライズ

以下はNetflixが公開した、Fast JSON API serialization with Ruby on Railsの戸田奈津子訳です。
私はRubyはRuby Associationシルバーを持ってる程度で、RoRはまともに使ったことがなくて知識皆無なので、誤りがある可能性が大です。

Fast JSON API serialization with Ruby on Rails

著:Shishir KakaraddiSrinivas RaghunathanAdam GrossRyan 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の意味がよくわからなかった。
依存なんてどうでもいいことを気にするんな、とかそういうこと?