В данный момент при клике на карточку пользователя мы загружаем /u/david.json, что является тем же самым эндпоинтом, что и для моего полного профиля. Это немного неэффективно, поскольку карточка пользователя даже не использует большую часть данных!
Поэтому мы будем переключать карточку пользователя на использование нового маршрута /u/david/card.json. Он содержит ровно столько информации, сколько необходимо для отображения карточки. По моим тестам, это делает карточки пользователей в 2–3 раза быстрее, чем раньше!
На данный момент это изменение скрыто за настройкой сайта. Чтобы попробовать его, перейдите в консоль Rails и выполните:
SiteSetting.enable_new_user_card_route = true
В ближайшие несколько недель это будет включено по умолчанию, и настройка сайта будет удалена. Сейчас это уже включено на Meta.
Отлично! Что мне нужно сделать?
Если вы пользователь или администратор форума, ничего! Вы очень скоро увидите улучшение производительности карточек пользователей!
Если вы разработчик плагинов, вам, возможно, потребуется внести несколько изменений для поддержки нового маршрута.
Я использую пользовательские поля в своём плагине и отображаю их на карточке пользователя
Никаких проблем: пользовательские поля будут работать точно так же, как и раньше.
Я добавляю данные в сериализатор пользователя и использую их в полном профиле пользователя
Всё в порядке: полный профиль пользователя будет продолжать использовать старый эндпоинт, и все существующие вызовы add_to_serializer продолжат работать.
Я добавляю данные в сериализатор пользователя и использую их на карточке пользователя
Хорошо, вам придётся немного поработать. Раньше у нас была структура вида:
class UserSerializer < BasicUserSerializer
Теперь у нас структура следующего вида:
class UserCardSerializer < BasicUserSerializer
# и
class UserSerializer < UserCardSerializer
Если вы хотите, чтобы что-то включалось в эндпоинт карточки, вам нужно добавить это в UserCardSerializer. Например, если у вас есть код вроде этого:
add_to_serializer(:user, :favourite_forum_software) do
"discourse"
end
Вам нужно изменить его на:
add_to_serializer(:user_card, :favourite_forum_software) do
"discourse"
end
UserSerializer автоматически включит всё, что есть в UserCardSerializer, поэтому вы можете внести это изменение сразу, и оно будет работать даже при отключённой скрытой настройке сайта (в тестах).
Для обеспечения совместимости со стабильной/бета-версиями добавьте проверку на UserCardSerializer следующим образом:
# TODO: Удалите переключатель после выпуска стабильной версии Discourse 2.4
serializer = (defined? UserCardSerializer) ? :user_card : :user
add_to_serializer(serializer, :favourite_forum_software) do
"discourse"
end