Experimentelle Funktion ‘lazy_loaded_categories’ bei Meta aktiviert

:information_source: Dieses Projekt wurde vorerst auf Eis gelegt. Wir werden es möglicherweise zu einem späteren Zeitpunkt wieder aufgreifen und Sie hier informieren, falls dies geschieht.

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

In den letzten Monaten haben wir intensiv daran gearbeitet, Discourse-Seiten für Communities mit vielen Kategorien (und nicht nur!) besser funktionieren zu lassen. Dies wird Administratoren ermöglichen, Tausende von Kategorien zu erstellen und dabei die vertraute benutzerfreundliche Erfahrung beizubehalten.

Dies ist immer noch eine experimentelle Funktion und kann durch Ändern der Site-Einstellung lazy_loaded_categories_groups aktiviert werden. Standardmäßig ist sie derzeit deaktiviert.

:gear: Wie funktioniert das?

Im Moment werden alle Kategoriendaten geladen, wenn Sie eine Discourse-Community aufrufen. Dies wird als „Eager Loading“ (vorzeitiges Laden) bezeichnet und ist für Websites mit vielen Kategorien nicht ideal, da dadurch viele Informationen übertragen werden, bevor das erste Rendern erfolgt, was die Gesamtladezeit erhöht.

Die neue Methode wird „Lazy Loading“ (verzögertes Laden) genannt und verzögert das Laden von Informationen über eine Kategorie, bis sie wirklich benötigt werden (zum Beispiel beim Suchen nach einer Kategorie, beim Navigieren oder Verlinken einer Kategorie, beim Lesen eines Themas oder Beitrags, der darauf verweist, usw.). Weniger übertragene Daten bedeuten schnellere Ladezeiten und glücklichere Benutzer! :star:

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

Wir haben diese Funktion intern intensiv getestet, aber angesichts des Umfangs der geleisteten Arbeit besteht eine geringe Wahrscheinlichkeit, dass Fehler auftreten. Wenn Ihnen etwas auffällt, das in Bezug auf Kategorien fehlerhaft funktioniert, teilen Sie uns dies bitte in einer Antwort auf dieses Thema mit oder erstellen Sie ein #bug-Thema.

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

Unabhängig davon, ob Sie bei uns gehostet werden oder selbst hosten, ist diese Funktion standardmäßig deaktiviert und es sollten keine sichtbaren Änderungen vorgenommen werden.

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

In Zukunft werden wir sie standardmäßig aktivieren und schließlich den Code, der Kategorien „eager loaded“, veraltet machen und entfernen.

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

Im Allgemeinen sollten für die meisten Plugins nur geringfügige oder gar keine Änderungen erforderlich sein, solange sie die Kategoriekomponenten aus dem Core oder vorab geladene Daten verwenden (zum Beispiel nur nach Kategorien abfragen, die bereits sichtbar sind, wenn die Seite geladen wird, da dies bedeutet, dass sie bereits vorab geladen wurden).

Einige Probleme können auftreten, wenn versucht wird, Informationen für Kategorien zu verwenden, die noch nicht geladen wurden. Die Methode Category.findByIds gibt weiterhin nur bereits geladene Kategorien zurück, während Category.asyncFindByIds eine Abfrage auf dem Server durchführen kann, falls 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.