諸行無常

IT色々お勉強中のブログ

Ruby on RailsによるJSON APIのシリアライズの高速化

英訳

Ruby on Railsアプリケーション向けの高速 JSON API gemのオープンソース・リリースを発表します。

  • Introduction

高速JSONAPIは、Active Model Serializer(AMS)が提供する主要な機能をすべて提供するとともに、 AMSよりも25倍高速というベンチマーク要件を満足しており、 スピードとパフォーマンスに重点を置いています。 このgemは、ルールとしてパフォーマンステストも実施します。 AMSは偉大なgemであり、fast_jsonapiは宣言の構文と機能について言及しています。 しかし、モデルに1つ以上のリレーションシップがある場合、AMSは遅くなり始めます。 これらのモデルでは複合ドキュメント、AKAサイドローディングはAMSをさらに遅くします。 UI上で無限のスクロールが必要になり、AMSの遅さがユーザーに見え始めます。

  • シリアル化を最適化するのはなぜですか?

JSON APIのシリアライゼーションは、よく実装された多くのRails APIのうち最も遅い部分の1つです。

AMSが提供する主要な機能をすべて高速で提供してみませんか?

  • 特徴:

    • アクティブモデルシリアライザに似た宣言構文
    • belongs_to、has_many、およびhas_oneのサポート
    • 複合文書のサポート(付属)
    • 複合ドキュメントの最適化されたシリアル化
    • キャッシング
    • Skylightインテグレーションによる計測(オプション)
  • Fast JSONAPIを使用してシリアライザを作成するにはどうすればよいですか?

Active Modelシリアライザは、シリアライザを宣言するのに馴染みのある方法を使います。 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
  • アクティブモデルシリアライザと比較するとどれくらい早いですか?

性能テストでは、AMSと比較して25〜40倍の速度向上が見られ、かなり複雑なモデルでもシリアライズ時間は無視できます。 シリアライズされたレコードの数が増えると、パフォーマンスが向上します。

私たちを信じてください?ベンチマークテストは自分で実行できます。 readmeを参照してください。

  • 依存

JSON APIはanti-bikesheddingです。

  • Future Work

我々は、gemに多くの機能を追加する予定です。提案、改善、修正、追加テストを歓迎します。