Modifiche alla fonte dei dati della carta utente

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
22 Mi Piace

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 Mi Piace

It does indeed! Watch this space :eyes:

7 Mi Piace

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

6 Mi Piace