Предложение: миграция с ActiveModelSerializers на Alba

Привет! Я заметил, что Discourse использует старую версию ActiveModelSerializer.
Она была выпущена пять лет назад, и я не думаю, что это хорошо.

Кажется, что планируется форк AMS, но есть лучшее решение.
Мое предложение — мигрировать с AMS на Alba, JSON-сериализатор, который я создал и поддерживаю. Хотя Alba не на 100% совместима с AMS, её API похож на AMS и работает примерно в 10 раз быстрее последней версии AMS.

Если мейнтейнеры согласятся на миграцию, я отправлю PR.

Не могли бы вы в рамках PR переключить 2 или 3 конечных точки на новый вариант и запустить несколько тестов производительности? Это поможет нам его оценить :blush:

Да, как отметил Фалько, нам нужно сосредоточиться на двух областях:

  1. Совместимость плагинов — многие плагины расширяют сериализаторы, и мы хотели бы минимизировать разрывы в обратной совместимости.

  2. Производительность — любые изменения в сериализаторах должны быть подтверждены твёрдыми данными.

Я рекомендую рассмотреть несколько сериализаторов, используемых на страницах тем или списков тем, и использовать их в качестве тестовой среды:

Затем сравните показатели «до» и «после» с помощью утилиты discourse bench. Это даст вам очень точное представление о достигнутом прогрессе.

Степень нарушения экосистемы, на которую мы готовы пойти, напрямую зависит от улучшения производительности.

Извините за поздний ответ.

Я полагаю, что это улучшит производительность, поэтому я запущу скрипт бенчмарка.

Я не знал о плагинах сериализаторов. Нашел один пример плагинов, которые кастомизируют сериализатор.

Здесь метод include_votes? кажется магическим методом от AMS, так как я не могу найти, где он используется в коде. Думаю, в таких случаях нам потребуется миграция, поскольку Alba не поддерживает такое поведение.

Поддержание совместимости должно быть важно, поэтому, если я не смогу сделать Alba совместимой с существующими плагинами, я предпочту не переходить на неё.

Магия, которую вы ищете, — это add_to_serializer. Вам не нужно создавать новый сериализатор.

Возможно, это поможет: Add to serializer only for staff and current user - #7 by paresy

Ах, спасибо, похоже, он просто определяет несколько вспомогательных методов, которые возвращают, включен ли плагин или нет, а также тело плагина. Думаю, я могу сделать его совместимым с Alba, давай попробую.

Извините. Я недостаточно внимательно изучил оригинальный плагин. Похоже, моя подсказка может быть не такой полезной, как я думал.

Если вы добавляете что-то в существующие сериализаторы (например, добавляете поле в сериализатор поста), то я помог. Если же вам нужно добавить новый маршрут, который возвращает собственную информацию, то вам потребуется сделать что-то другое.