Änderungen an der Datenquelle der Benutzerkarte

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
22 „Gefällt mir“

Great stuff @david. Really excited to see this one. I agree a 100% to the fact that a new serializer was needed to user cards.

I think this change also lays the ground for displaying user cards on the /u route.

7 „Gefällt mir“

It does indeed! Watch this space :eyes:

7 „Gefällt mir“

This is now the new default, and the setting has been removed

6 „Gefällt mir“