Experimentelle Funktion ‚lazy_loaded_categories‘ auf Meta aktiviert

:information_source: Dieses Projekt wurde vorerst ausgesetzt. Wir können uns in der Zukunft erneut damit befassen und werden hier ein Update posten, falls dem so ist.

Wir führen eine experimentelle Funktion ein, um Communities mit einer großen Anzahl an Kategorien zu unterstützen. :rocket:

In den letzten Monaten haben wir hart daran gearbeitet, Discourse-Sites für Communities mit vielen Kategorien (und nicht nur diese!) besser funktionieren zu lassen. Dies wird Administratoren ermöglichen, Tausende von Kategorien zu erstellen, während Sie die vertraute, benutzerfreundliche UX beibehalten.

Dies ist weiterhin eine experimentelle Funktion und kann aktiviert werden, indem die Site-Einstellung lazy_loaded_categories_groups angepasst wird. Sie ist standardmäßig deaktiviert.

:gear: Wie funktioniert das?

Im Moment werden alle Kategoriedaten geladen, wenn Sie zu einer Discourse-Community navigieren. Dies wird als „Eager Loading“ (vorzeitiges Laden) bezeichnet und ist für Sites mit vielen Kategorien nicht ideal, da dies bedeutet, dass vor dem ersten Rendern viele Informationen übertragen werden, was die gesamte Ladezeit erhöht.

Die neue Methode wird als „Lazy Loading“ (verzögertes Laden) bezeichnet und verschiebt das Laden von Informationen über eine Kategorie, bis es wirklich notwendig ist (z. B. bei der Suche nach einer Kategorie, beim Navigieren oder Verlinken einer Kategorie, beim Lesen eines Themas oder Beitrags, der eine Kategorie erwähnt, usw.). Weniger übertragene Daten bedeuten eine schnellere Ladezeit und zufriedene Benutzer! :star:

:discourse: Was bedeutet das für Sie als Mitglied von Meta?

Wir haben diese Funktion intensiv intern getestet, aber angesichts des Umfangs der durchgeführten Arbeit besteht eine geringe Chance, dass Bugs eingeführt werden. Wenn Sie etwas feststellen, das im Zusammenhang mit Kategorien nicht ordnungsgemäß funktioniert, lassen Sie es uns als Antwort auf dieses Thema wissen oder eröffnen Sie ein Thema mit dem Tag Contribute > Bug.

:people_holding_hands: Was bedeutet das für Sie oder Ihre Community?

Egal, ob Sie bei uns gehostet sind oder Ihre eigene Installation betreiben, diese Funktion ist standardmäßig deaktiviert, und es sollte keine sichtbaren Änderungen geben.

Wenn Sie jedoch planen, Ihre Community auf viele Kategorien auszuweiten, empfehlen wir Ihnen dringend, diese Funktion zu aktivieren.

In der Zukunft werden wir sie standardmäßig aktivieren und den Code, der Kategorien „eager loads“ (vorzeitig lädt), schrittweise veralten lassen und schließlich entfernen.

:technologist: Was bedeutet das für Plugin- und Theme-Entwickler?

Im Allgemeinen sollten für die meisten Plugins kaum bis keine Änderungen notwendig sein, solange sie die Kategorien-Komponenten aus dem Core oder vorgeladene Daten verwenden (z. B. nur nach Kategorien abfragen, die beim Laden der Seite bereits sichtbar sind, da dies bedeutet, dass sie bereits vorgeladen wurden).

Probleme können auftreten, wenn versucht wird, Informationen für Kategorien zu verwenden, die noch nicht geladen wurden. Die Methode Category.findByIds wird weiterhin nur Kategorien zurückgeben, die bereits geladen wurden, während Category.asyncFindByIds eine Suche auf dem Server durchführen kann, wenn die Informationen noch nicht geladen wurden.

44 „Gefällt mir“

Die Kategorieinformationen scheinen zu fehlen, wenn Sie einen der Links unter einem Beitrag verwenden, um zu einem Thema in einer anderen Kategorie zu navigieren. Ich habe Contributing translations to Discourse in einem neuen Tab geöffnet und bin zu Switching from Transifex to Crowdin navigiert, dann sieht es so aus:


Nach einem Neuladen erscheint die Kategorie.

6 „Gefällt mir“

Nachdem ich mein Thema #site-feedback:theme-feedback gepostet hatte, fehlte das Kategorie-Badge für Themen dieser Kategorie

4 „Gefällt mir“

Die Suchfunktion in der Komposition kann nicht feststellen, ob eine passende Kategorie vorhanden ist.

3 „Gefällt mir“

Hängt das auch mit den Lazy-Loading-Kategorien zusammen?

2 „Gefällt mir“

Ja. Ich habe lazy_load_categories vorerst deaktiviert, da es das Docs-Plugin beschädigt hat.

5 „Gefällt mir“

Wir haben dieses Experiment hier wieder aktiviert. Was seit der letzten Aktivierung behoben wurde:

  • Kategorien in der Kopfzeile werden korrekt angezeigt, insbesondere beim Navigieren von einem Thema zu einem anderen über Beitragslinks oder vorgeschlagene Themen

  • Das Styling von Abzeichen wird nach dem Erstellen eines neuen Themas in einer Kategorie, zu der zuvor nicht navigiert wurde, korrekt angezeigt

  • Das Docs-Plugin lädt Kategoriedaten vor, sodass die Seite /docs jetzt korrekt gerendert wird

  • Andere Fehler, die durch interne Überprüfung entdeckt wurden

Der einzige verbleibende Fehler betrifft fehlende Suchergebnisse für bestimmte Abfragen (kurze Abfragen oder Abfragen, die nur Stoppwörter enthalten).

Wir wollten die Suche leistungsfähiger machen und haben die Volltextsuchmaschine auf Kategorien erweitert. Dies ist ein unerwünschter Nebeneffekt. Ich denke, wir werden den vorherigen Suchalgorithmus rückgängig machen müssen, aber wir untersuchen dies noch.

7 „Gefällt mir“

Die Kategorien der Kategorie-Moderatoren unter /about fehlen

Und wenn ich meine Entwürfe ansehe, fehlen auch die Kategorien.

Die Aktivitätsseite einer Gruppe oder eines Benutzers und die Benachrichtigungen in meinem Profil wie https://meta.discourse.org/my/notifications/responses laden keine Kategorien

Wenn Sie den Composer öffnen, um ein neues Thema mit einem Link in einer Nachricht zu beginnen, oder indem Sie in Ihrem Posteingang auf neue Nachricht klicken und die Briefhülle oben links im Composer verwenden, um den Entwurf in einen neuen Thema-Entwurf umzuwandeln, gibt es keine Option zur Auswahl einer Kategorie.

8 „Gefällt mir“

Wenn Sie /categories öffnen, werden nicht alle Unterkategorien von Documentation angezeigt (#documentation:theme-developers verschwindet nach dem Neuladen, bis ich auf Documentation klicke).

Und die Autovervollständigung für die Suche nach Kategorien funktioniert nicht. Die meisten Kategorien werden nach dem Neuladen nicht angezeigt

3 „Gefällt mir“

Die Kategorien fehlen auch in der Liste der verwandten Themen.

Und als ich die Themen besuchte, um die Kategorien für den zweiten Screenshot zu laden, bemerkte ich, dass beim zweiten #announcements:blog-Thema die Kategorie unter dem Thema fehlte. Ich gehe davon aus, dass dies nicht wichtig ist, da es nicht passieren sollte, wenn die verwandten Themen funktionieren.

4 „Gefällt mir“

Dies scheint jedoch in einem meiner Plugins unter 3.2.1 Stable ein Problem zu verursachen.

Wenn ich Site.current().categories inspiziere und das Lazy Loading aktiviert ist, sehe ich (nur) die benötigten Kategorien (wie die Kategorie für das aktuelle Thema), aber alle preloaded_category_custom_fields scheinen zu fehlen.

Sie erscheinen, wenn ich das Lazy Loading deaktiviere (zusammen mit allen anderen Kategorien).

Die richtige Kategorie wird also vorab geladen, aber ihr fehlen die vorab geladenen Felder.

1 „Gefällt mir“

Dies wurde behoben. :white_check_mark:

Ebenfalls behoben. :white_check_mark:

Ebenfalls behoben. :white_check_mark:

An den anderen Problemen wird gerade gearbeitet. Vielen Dank für Ihr Feedback, @Moin.

Es hängt davon ab, wie die Kategorien geladen wurden. Ich stimme zu, dass es wahrscheinlich einige Code-Pfade gibt, die dazu führen können, dass teilweise Kategoriedaten geladen werden. Ich werde mich mit dem Team über dieses Problem austauschen, aber da wir uns in einem Zustand befinden, in dem das Frontend die benötigten Daten anfordern muss, bevor es darauf zugreifen kann.

Ist es ein öffentliches Plugin? Wenn ja, kann ich es mir ansehen. Im Allgemeinen erforderten die beliebtesten Plugins, die wir haben, nur sehr wenige Änderungen, um sie zum Laufen zu bringen, wenn “Kategorien per Lazy Loading laden” aktiviert ist.

3 „Gefällt mir“

Die Farbe der übergeordneten Kategorie fehlt immer noch


2 „Gefällt mir“

Es passiert in einer normalen Themenansicht.
Das Einzige, was besonders sein könnte, ist, dass der Code in einem Initialisierer in einem Widget steckt, das an das post-contents:before-Widget angehängt ist. Das Plugin ist nicht öffentlich, aber ich kann Ihnen Zugang gewähren, wenn Sie mir Ihren Github-Benutzernamen per PM senden. Alternativ kann ich Ihnen eine PM mit einer tar.gz senden, was einfacher sein könnte. Das Plugin ist alt und wurde ursprünglich nicht von mir geschrieben, aber ich sehe nichts, was offensichtlich falsch ist.

Wie wird das funktionieren? Ich kann die binäre Situation verstehen, in der eine Kategorie vorhanden ist oder nicht. Aber wenn ich auf eine Kategorie ohne ein bestimmtes benutzerdefiniertes Feld stoße, woher weiß ich dann, ob das benutzerdefinierte Feld fehlt oder ob es einfach noch nicht vollständig geladen ist?

d. h. das sollte niemals passieren!

1 „Gefällt mir“

Kannst du mir also bei diesem hier helfen @nbianca?

Wenn das verzögerte Laden aktiviert ist, fehlen die benutzerdefinierten Felder im Kategorieobjekt hier in meinem öffentlichen Plugin für private Antworten.

      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);
      }

und ich habe keine Ahnung, wie ich sie bekommen kann.

Ich füge hier das Feld zu den vorab geladenen benutzerdefinierten Kategorie-Feldern hinzu.

Site.preloaded_category_custom_fields << 'private_replies_enabled'

Ich bespreche dies intern mit dem Team, aber ich denke, wir müssen überarbeiten, wie wir Kategorien für Themen vorladen.

2 „Gefällt mir“

Ich habe eine weitere Stelle gefunden, an der Kategorien fehlen: die KI-Suchergebnisse.

2 „Gefällt mir“

Wenn ich meta.discourse.org aktualisiere und auf + Neues Thema klicke, erscheint die Thema-Vorlage nicht. Anfangs funktioniert alles wie im Video gezeigt. Nach dem Neuladen fehlt die Vorlage. Sobald ich den Komponisten erneut öffne, funktioniert alles wieder wie erwartet.

Hinweis: Wenn Sie Support in Ihrer Seitenleiste haben, müssen Sie es vor dem Neuladen entfernen.

1 „Gefällt mir“

Based und skalierbarkeit-pilled.