こんにちは。Discourse が ActiveModelSerializer の古いバージョンを使用していることに気づきました。
5年前にリリースされたもので、良いとは思えません。
AMS をフォークする計画があるようですが、より良い解決策があります。
私の提案は、AMS から私が作成・保守している JSON シリアライザーである Alba に移行することです。Alba は AMS と 100% 互換性があるわけではありませんが、提供する API は AMS に似ており、最新の AMS よりも約 10 倍高速です。
メンテナーが移行に同意すれば、PR を送信します。
「いいね!」 4
Falco
(Falco)
2
PRで2つか3つのエンドポイントをそれに変更し、ベンチマークを実行していただけませんか?評価の助けになるかもしれません 
「いいね!」 4
sam
(Sam Saffron)
3
はい、Falco が言及したように、ここでは 2 つの領域について心配する必要があります。
- プラグインの互換性 - 多くのプラグインはシリアライザーを拡張しており、破壊的な変更を最小限に抑えたいと考えています。
- パフォーマンス - シリアライザーの変更は、確かなデータによって裏付けられる必要があります。
トピックまたはトピック リストのページに関係するシリアライザーの一部を確認し、それらをテスト グラウンドとして使用することを推奨します。
次に、discoruse bench の「変更前」と「変更後」の数値を参照してください。これにより、達成された進捗状況を非常に正確に把握できます。
受け入れ可能なエコシステムの中断の量は、ここでのパフォーマンスの向上に大きく依存します。
「いいね!」 6
返信が遅くなり申し訳ありません。
パフォーマンスが改善されると思われるので、ベンチマークスクリプトを実行します。
シリアライザープラグインについては知りませんでした。シリアライザーをカスタマイズするプラグインの例を見つけました。
ここで、include_votes? メソッドは、コードベースのどこでも使用されていないため、AMS のマジックメソッドのように見えます。Alba はこの動作をサポートしていないため、このようなケースではマイグレーションが必要になると思います。
互換性を維持することは重要なので、Alba を既存のプラグインと互換性のあるものにできない場合は、先に進むのは避けたいと思います。
「いいね!」 2
pfaffman
(Jay Pfaffman)
5
お探しの魔法は add_to_serializer です。新しいシリアライザーを作成する必要はありません。
こちらがお役に立つかもしれません: Add to serializer only for staff and current user - #7 by paresy
ああ、ありがとう。プラグインが有効かどうか、およびプラグインの本体を返すヘルパーメソッドを定義しているようです。Albaと互換性を持たせることができると思います。試してみます。
pfaffman
(Jay Pfaffman)
7
申し訳ありません。元のプラグインをよく見ていませんでした。私のヒントは思ったほど役に立たないかもしれません。
既存のシリアライザーに何かを追加している場合(投稿シリアライザーにフィールドを追加するなど)は、お手伝いしました。独自の情報を返す新しいルートを追加する必要がある場合は、別のことを行う必要があります。