Al momento, quando si fa clic su una scheda utente, viene caricato /u/david.json, che è esattamente lo stesso endpoint del mio profilo completo. Questo è un po’ inefficiente, dato che la scheda utente non utilizza affatto la maggior parte dei dati!
Pertanto, passeremo l’uso della scheda utente a una nuova rotta /u/david/card.json. Questa contiene solo le informazioni necessarie per renderizzare la scheda. Nei miei test, questo rende le schede utente da 2 a 3 volte più veloci rispetto a prima!
Al momento, questa modifica è nascosta dietro un’impostazione del sito. Per provarla, vai alla tua console Rails ed esegui:
SiteSetting.enable_new_user_card_route = true
Nei prossimi settimane, questa funzionalità sarà abilitata per impostazione predefinita e l’impostazione del sito verrà rimossa. Attualmente è abilitata su Meta.
Ottimo! Cosa devo fare?
Se sei un utente o un amministratore del forum, nulla! Dovresti notare un miglioramento delle prestazioni delle schede utente molto presto!
Se sei uno sviluppatore di plugin, potresti dover apportare alcune modifiche per supportare la nuova rotta.
Uso campi personalizzati nel mio plugin e li rendo nella scheda utente
Nessun problema, i campi personalizzati continueranno a funzionare esattamente nello stesso modo.
Aggiungo dati al serializzatore utente e li uso nel profilo utente completo
Va bene, il profilo utente continuerà a utilizzare il vecchio endpoint e qualsiasi chiamata esistente a add_to_serializer continuerà a funzionare.
Aggiungo dati al serializzatore utente e li uso nella scheda utente
Ok, dovrai fare un piccolo lavoro. In precedenza avevamo una struttura come:
class UserSerializer < BasicUserSerializer
Ora abbiamo una struttura come:
class UserCardSerializer < BasicUserSerializer
# e
class UserSerializer < UserCardSerializer
Se vuoi che qualcosa sia incluso nell’endpoint della scheda, devi aggiungerlo al UserCardSerializer. Ad esempio, se hai un codice come questo:
add_to_serializer(:user, :favourite_forum_software) do
"discourse"
end
Devi cambiarlo in:
add_to_serializer(:user_card, :favourite_forum_software) do
"discourse"
end
Il UserSerializer includerà automaticamente tutto ciò che è presente nel UserCardSerializer, quindi puoi apportare questa modifica immediatamente e funzionerà anche nei test superati (anche con l’impostazione del sito nascosta disabilitata).
Per mantenere la compatibilità con le versioni stable/beta, aggiungi un controllo per UserCardSerializer come questo:
# TODO: Rimuovi il switch una volta rilasciato Discourse 2.4 stable
serializer = (defined? UserCardSerializer) ? :user_card : :user
add_to_serializer(serializer, :favourite_forum_software) do
"discourse"
end