Derzeit laden wir beim Klicken auf eine Benutzerkarte /u/david.json, was exakt demselben Endpunkt entspricht wie mein vollständiges Profil. Das ist etwas verschwenderisch, da die Benutzerkarte den Großteil der Daten gar nicht verwendet!
Daher wechseln wir die Benutzerkarte zu einer neuen Route /u/david/card.json. Diese enthält genau die Informationen, die für die Darstellung der Karte erforderlich sind. In meinen Tests ist dies 2- bis 3-mal schneller als zuvor!
Derzeit ist diese Änderung hinter einer versteckten Site-Einstellung verborgen. Um sie auszuprobieren, gehen Sie zu Ihrer Rails-Konsole und führen Sie folgenden Befehl aus:
SiteSetting.enable_new_user_card_route = true
In den nächsten Wochen wird dies standardmäßig aktiviert sein, und die Site-Einstellung wird entfernt. Dies ist derzeit auf Meta aktiviert.
Super! Was muss ich tun?
Wenn Sie ein Benutzer oder Forum-Administrator sind, nichts! Sie sollten sehr bald eine verbesserte Leistung bei Benutzerkarten feststellen!
Wenn Sie ein Plugin-Entwickler sind, müssen Sie möglicherweise einige Anpassungen vornehmen, um die neue Route zu unterstützen.
Ich verwende benutzerdefinierte Felder in meinem Plugin und rendere sie auf der Benutzerkarte
Kein Problem, benutzerdefinierte Felder funktionieren weiterhin genau gleich.
Ich füge Daten zum User-Serializer hinzu und verwende sie im vollständigen Benutzerprofil
In Ordnung, das Benutzerprofil wird weiterhin den alten Endpunkt verwenden, und alle bestehenden add_to_serializer-Aufrufe funktionieren weiterhin.
Ich füge Daten zum User-Serializer hinzu und verwende sie auf der Benutzerkarte
Okay, Sie müssen etwas Arbeit leisten. Bisher hatten wir eine Struktur wie:
class UserSerializer < BasicUserSerializer
Jetzt haben wir eine Struktur wie:
class UserCardSerializer < BasicUserSerializer
# und
class UserSerializer < UserCardSerializer
Wenn Sie möchten, dass etwas im Karten-Endpunkt enthalten ist, müssen Sie es zum UserCardSerializer hinzufügen. Wenn Sie beispielsweise Code wie diesen haben:
add_to_serializer(:user, :favourite_forum_software) do
"discourse"
end
müssen Sie ihn ändern in:
add_to_serializer(:user_card, :favourite_forum_software) do
"discourse"
end
Der UserSerializer enthält automatisch alles im UserCardSerializer, sodass Sie diese Änderung sofort vornehmen können, und sie funktioniert auch dann, wenn die versteckte Site-Einstellung deaktiviert ist (z. B. in Tests).
Um die Kompatibilität mit Stable/Beta zu gewährleisten, fügen Sie eine Prüfung auf UserCardSerializer wie folgt hinzu:
# TODO: Entfernen Sie den Switch, sobald Discourse 2.4 Stable veröffentlicht wurde
serializer = (defined? UserCardSerializer) ? :user_card : :user
add_to_serializer(serializer, :favourite_forum_software) do
"discourse"
end