Funzione sperimentale 'lazy_loaded_categories' abilitata su Meta

:information_source: Questo progetto è stato sospeso per ora. Potremmo riprenderlo in futuro e pubblicheremo un aggiornamento qui in tal caso.

Stiamo introducendo una funzionalità sperimentale per aiutare le community con un gran numero di categorie. :rocket:

Negli ultimi mesi abbiamo lavorato sodo per rendere i siti Discourse più performanti per le community con molte categorie (e non solo!). Ciò consentirà agli amministratori di creare migliaia di categorie mantenendo l’esperienza utente (UX) amichevole a cui siete abituati.

Questa è ancora una funzionalità sperimentale e può essere abilitata modificando l’impostazione del sito lazy_loaded_categories_groups. Attualmente è disabilitata per impostazione predefinita.

:gear: Come funziona?

Al momento, tutti i dati delle categorie vengono caricati quando si naviga in una community di Discourse. Questo è chiamato “eager loading” (caricamento anticipato) e non è l’ideale per i siti con molte categorie perché significa che molte informazioni vengono trasferite prima del primo rendering, il che aumenta il tempo di caricamento complessivo.

Il nuovo metodo è chiamato “lazy loading” (caricamento pigro) e ritarderà il caricamento delle informazioni su una categoria fino a quando non sarà realmente necessario (ad esempio, quando si cerca una categoria, si naviga o si collega a una, si legge un argomento o un post che la menziona, ecc.). Meno dati trasferiti significano tempi di caricamento più rapidi e utenti più felici! :star:

:discourse: Cosa significa questo per te, come membro di Meta?

Abbiamo testato approfonditamente questa funzionalità internamente, ma data l’entità del lavoro svolto, c’è una leggera possibilità di introdurre bug. Se noti malfunzionamenti relativi alle categorie, faccelo sapere rispondendo a questo argomento o aprendo un argomento in Bug.

:people_holding_hands: Cosa significa questo per te o per la tua community?

Sia che tu sia ospitato da noi o che tu sia self-hosted, questa funzionalità è disabilitata per impostazione predefinita e non dovrebbero esserci modifiche visibili.

Tuttavia, se stai pensando di espandere la tua community per avere molte categorie, ti incoraggiamo vivamente ad abilitare questa funzionalità.

In futuro, la abiliteremo per impostazione predefinita e alla fine deprecieremo e rimuoveremo il codice che esegue l’“eager loading” delle categorie.

:technologist: Cosa significa questo per gli sviluppatori di plugin e temi?

In generale, dovrebbero esserci poche o nessuna modifica necessaria per la maggior parte dei plugin, purché utilizzino i componenti delle categorie dal core o i dati precaricati (ad esempio, interrogando solo le categorie che sono già visibili durante il caricamento della pagina, poiché ciò significa che sono già state precaricate).

Alcuni problemi potrebbero apparire quando si tenta di utilizzare informazioni per categorie che non sono ancora state caricate. Il metodo Category.findByIds continuerà a restituire solo le categorie che sono già state caricate, mentre Category.asyncFindByIds potrebbe eseguire una ricerca sul server se le informazioni non sono ancora state caricate.

44 Mi Piace

Le informazioni sulla categoria sembrano mancare quando si utilizza uno dei link sotto un post per navigare verso un argomento in una categoria diversa. Ho aperto Contributing translations to Discourse in una nuova scheda e ho navigato verso Switching from Transifex to Crowdin, quindi appare così:


Dopo un ricaricamento, la categoria appare.

6 Mi Piace

Dopo aver pubblicato il mio argomento #site-feedback:theme-feedback, il badge della categoria mancava per gli argomenti di quella categoria

4 Mi Piace

La funzione di ricerca all’interno del composer non è in grado di determinare se esiste una categoria corrispondente.

3 Mi Piace

È anche correlato alle categorie caricate in modo differito?

2 Mi Piace

Sì. Ho disabilitato il lazy_load_categories per il momento perché stava causando problemi al plugin docs.

5 Mi Piace

Abbiamo riattivato questo esperimento qui. Cosa è stato corretto da quando è stato abilitato l’ultima volta:

  • Le categorie nell’intestazione vengono popolate correttamente, specialmente quando si naviga da un argomento all’altro utilizzando collegamenti ai post o argomenti suggeriti

  • Lo stile dei badge verrà visualizzato correttamente dopo aver creato un nuovo argomento in una categoria a cui non si è navigato in precedenza

  • Il plugin Docs precarica i dati delle categorie, quindi la pagina /docs ora viene renderizzata correttamente

  • Altri bug scoperti tramite revisione interna

L’unico bug in sospeso riguarda i risultati di ricerca mancanti per determinate query (query brevi o query che contengono solo parole vuote).

Volevamo rendere la ricerca più potente e abbiamo esteso il motore di ricerca full-text alle categorie, e questo è un effetto collaterale indesiderato. Penso che dovremo ripristinare l’algoritmo di ricerca precedente, ma stiamo ancora indagando su questo.

7 Mi Piace

Le categorie dei moderatori di categoria su /about sono mancanti

E quando guardo le mie bozze, anche le categorie sono mancanti.

La pagina delle attività di un gruppo o utente e le notifiche nel mio profilo come https://meta.discourse.org/my/notifications/responses non caricano le categorie.

Quando si apre il compositore per iniziare un nuovo argomento con un link in un messaggio o facendo clic su nuovo messaggio nella posta in arrivo e utilizzando la busta in alto a sinistra del compositore per trasformare la bozza in una nuova bozza di argomento, non c’è opzione per scegliere una categoria.

8 Mi Piace

Quando apri /categories, non tutte le sottocategorie di Documentation vengono mostrate (#documentation:theme-developers scompare dopo il ricaricamento finché non faccio clic su Documentation).

E l’autocompletamento per la ricerca delle categorie non funziona. La maggior parte delle categorie non viene mostrata dopo il ricaricamento

3 Mi Piace

Mancano anche le categorie nell’elenco degli argomenti correlati.

E quando ho visitato gli argomenti per caricare le categorie per il secondo screenshot, ho notato che al secondo argomento Announcements > Blog, la categoria sotto il titolo dell’argomento era mancante. Presumo che non sia importante perché non dovrebbe accadere quando gli argomenti correlati funzionano.

4 Mi Piace

Questo sembra causare un problema in uno dei miei plugin su 3.2.1 stable.

Quando ispeziono Site.current().categories e il caricamento lazy è abilitato, vedo (solo) le categorie di cui ho bisogno (come la categoria per l’argomento corrente), ma tutti i preloaded_category_custom_fields sembrano mancare.

Appaiono quando disabilito il caricamento lazy (insieme a tutte le altre categorie).

Quindi la categoria corretta viene precaricata ma mancano i suoi campi precaricati.

1 Mi Piace

È stato risolto. :white_check_mark:

Risolto anche questo. :white_check_mark:

Risolto anche questo. :white_check_mark:

Gli altri problemi sono attualmente in fase di elaborazione. Grazie mille per il tuo feedback, @Moin.

Dipende da come sono state caricate le categorie. Concordo sul fatto che ci siano probabilmente alcuni percorsi di codice che potrebbero portare al caricamento di dati parziali delle categorie. Comunicherò con il team riguardo a questo problema, ma poiché ci stiamo muovendo verso uno stato in cui il frontend dovrà richiedere i dati di cui ha bisogno prima di accedervi.

È un plugin pubblico? Se sì, posso dargli un’occhiata. In generale, i plugin più popolari che abbiamo richiesto pochissime modifiche per farli funzionare quando è abilitato il “caricamento lazy delle categorie”.

3 Mi Piace

Il colore della categoria genitore manca ancora


2 Mi Piace

Sta succedendo in una normale visualizzazione di argomento.

L’unica cosa che potrebbe essere speciale è che il codice si trova in un inizializzatore, in un widget collegato al widget post-contents:before. Il plugin non è pubblico ma posso darti accesso se mi mandi il tuo nome utente Github tramite messaggio privato. In alternativa posso inviarti un messaggio privato con un tar.gz, che potrebbe essere più facile. Il plugin è vecchio e non è stato scritto originariamente da me, ma non vedo nulla che sia palesemente sbagliato.

Quindi, come funzionerà? Posso capire la situazione binaria in cui una categoria c’è o non c’è. Ma se incontro una categoria senza un campo personalizzato specifico, come faccio a sapere se il campo personalizzato è assente o se non è ancora stato completamente caricato?

cioè, questo non dovrebbe mai succedere!

1 Mi Piace

Quindi puoi aiutarmi con questo @nbianca?

Quando il caricamento lazy è abilitato, i campi personalizzati mancano dall’oggetto categoria qui nel mio plugin pubblico per le risposte private.

      if ((siteSettings.private_replies_on_selected_categories_only == false) || (topic?.category?.custom_fields?.private_replies_enabled)) {
        return this.currentUser && ((this.currentUser.id == topic_owner_id) || this.currentUser.staff);
      }

e non ho idea di come ottenerli.

Sto aggiungendo il campo ai campi personalizzati della categoria precaricati.

Site.preloaded_category_custom_fields << 'private_replies_enabled'

Sto discutendo internamente con il team, ma penso che dovremo rivedere come precarichiamo le categorie per gli argomenti.

2 Mi Piace

Ho trovato un altro punto in cui mancano le categorie: i risultati della ricerca AI.

2 Mi Piace

Quando aggiorno meta.discourse.org e seleziono + Nuovo argomento, il modello di argomento non viene visualizzato. Inizialmente, come dimostrato nel video, tutto funziona correttamente. Tuttavia, dopo il ricaricamento, il modello è assente. Una volta riaperto il composer, tutto riprende a funzionare come previsto.

Nota: se hai Support nella barra laterale, devi rimuoverlo prima del ricaricamento.

1 Mi Piace

Basato e scalabile.