Fonctionnalité expérimentale ‘lazy_loaded_categories’ activée sur Meta

:information_source: Ce projet est mis en pause pour le moment. Nous pourrions le reprendre à l’avenir et publierons une mise à jour ici si tel est le cas.

Nous introduisons une fonctionnalité expérimentale pour aider les communautés avec un grand nombre de catégories. :rocket:

Ces derniers mois, nous avons travaillé d’arrache-pied pour améliorer le fonctionnement des sites Discourse pour les communautés ayant de nombreuses catégories (et pas seulement !) Cela permettra aux administrateurs de créer des milliers de catégories tout en conservant l’expérience utilisateur conviviale à laquelle vous êtes habitués.

Il s’agit toujours d’une fonctionnalité expérimentale et elle peut être activée en ajustant le paramètre de site lazy_loaded_categories_groups. Elle est actuellement désactivée par défaut.

:gear: Comment cela fonctionne-t-il ?

Actuellement, toutes les données de catégorie sont chargées lorsque vous naviguez vers une communauté Discourse. C’est ce qu’on appelle le « chargement anticipé » (eager loading) et ce n’est pas idéal pour les sites avec de nombreuses catégories, car cela signifie que beaucoup d’informations sont transférées avant le premier rendu, ce qui augmente le temps de chargement global.

La nouvelle méthode s’appelle le « chargement différé » (lazy loading) et différera le chargement des informations sur une catégorie jusqu’à ce qu’elles soient réellement nécessaires (par exemple, lors de la recherche d’une catégorie, de la navigation ou du lien vers une catégorie, de la lecture d’un sujet ou d’un message la mentionnant, etc.). Moins de données transférées signifie un temps de chargement plus rapide et des utilisateurs plus heureux ! :star:

:discourse: Qu’est-ce que cela signifie pour vous, en tant que membre de Meta ?

Nous avons testé cette fonctionnalité de manière approfondie en interne, mais compte tenu de l’étendue du travail effectué, il existe une légère possibilité d’introduction de bogues. Si vous remarquez un dysfonctionnement lié aux catégories, veuillez nous en informer en répondant à ce sujet ou en ouvrant un sujet dans Bug.

:people_holding_hands: Qu’est-ce que cela signifie pour vous ou votre communauté ?

Que vous soyez hébergé par nous ou que vous soyez auto-hébergé, cette fonctionnalité est désactivée par défaut et ne devrait entraîner aucun changement visible.

Cependant, si vous envisagez d’étendre votre communauté pour qu’elle comporte de nombreuses catégories, nous vous encourageons fortement à activer cette fonctionnalité.

À l’avenir, nous allons l’activer par défaut et éventuellement déprécier et supprimer le code qui « charge anticipativement » les catégories.

:technologist: Qu’est-ce que cela signifie pour les développeurs de plugins et de thèmes ?

En général, il ne devrait y avoir que peu ou pas de changements nécessaires pour la plupart des plugins, tant qu’ils utilisent les composants de catégorie du cœur ou les données préchargées (par exemple, interrogez uniquement les catégories déjà visibles lors du chargement de la page, car cela signifie qu’elles ont déjà été préchargées).

Certains problèmes peuvent survenir lorsque l’on essaie d’utiliser des informations pour des catégories qui n’ont pas encore été chargées. La méthode Category.findByIds continuera de ne retourner que les catégories déjà chargées, tandis que Category.asyncFindByIds peut effectuer une recherche sur le serveur si l’information n’a pas encore été chargée.

44 « J'aime »

Les informations de catégorie semblent manquer lorsque vous utilisez l’un des liens sous un article pour naviguer vers un sujet dans une catégorie différente. J’ai ouvert Contributing translations to Discourse dans un nouvel onglet et j’ai navigué vers Switching from Transifex to Crowdin, puis cela ressemble à ceci :


Après un rechargement, la catégorie apparaît.

6 « J'aime »

Après avoir publié mon sujet #site-feedback:theme-feedback, le badge de catégorie était manquant pour les sujets de cette catégorie

4 « J'aime »

La fonction de recherche dans le compositeur est incapable de déterminer s’il existe une catégorie correspondante.

3 « J'aime »

Est-ce que cela est également lié aux catégories chargées paresseusement ?

2 « J'aime »

Oui. J’ai désactivé lazy_load_categories pour le moment car cela cassait le plugin de documentation.

5 « J'aime »

Nous avons réactivé cette expérience ici. Ce qui a été corrigé depuis sa dernière activation :

  • Les catégories dans l’en-tête sont correctement renseignées, notamment lors de la navigation d’un sujet à un autre à l’aide de liens de publication ou de sujets suggérés.

  • Le style des badges s’affichera correctement après la création d’un nouveau sujet dans une catégorie qui n’a pas été visitée auparavant.

  • Le plugin Docs précharge les données des catégories, de sorte que la page /docs est maintenant rendue correctement.

  • D’autres bugs découverts lors d’une revue interne.

Le seul bug en suspens concerne l’absence de résultats de recherche pour certaines requêtes (requêtes courtes ou requêtes contenant uniquement des mots vides).

Nous voulions rendre la recherche plus performante et avons étendu le moteur de recherche plein texte aux catégories, et c’est un effet secondaire indésirable. Je pense que nous devrons annuler l’algorithme de recherche précédent, mais nous sommes toujours en train d’enquêter.

7 « J'aime »

Les catégories des modérateurs de catégorie sur /about sont manquantes

Et quand je regarde mes brouillons, les catégories sont également manquantes.

La page d’activité d’un groupe ou d’un utilisateur et les notifications de mon profil comme https://meta.discourse.org/my/notifications/responses ne chargent pas les catégories.

Lorsque vous ouvrez le compositeur pour démarrer un nouveau sujet avec un lien dans un message ou en cliquant sur nouveau message dans votre boîte de réception et en utilisant l’enveloppe en haut à gauche du compositeur pour transformer le brouillon en un nouveau brouillon de sujet, il n’y a pas d’option pour choisir une catégorie.

8 « J'aime »

Lorsque vous ouvrez /categories, toutes les sous-catégories de Documentation ne sont pas affichées (#documentation:theme-developers disparaît après le rechargement jusqu’à ce que je clique sur Documentation).

Et l’autocomplétion pour la recherche de catégories ne fonctionne pas. La plupart des catégories ne s’affichent pas après le rechargement

3 « J'aime »

Les catégories sont également manquantes dans la liste des sujets connexes.

Et lorsque j’ai visité les sujets pour charger les catégories pour la deuxième capture d’écran, j’ai remarqué que dans le deuxième sujet Announcements > Blog, la catégorie sous le titre du sujet était manquante. Je suppose que ce n’est pas important car cela ne devrait pas arriver lorsque les sujets connexes fonctionnent.

4 « J'aime »

Cela semble causer un problème dans l’un de mes plugins sur la version stable 3.2.1.

Lorsque j’inspecte Site.current().categories et que le chargement paresseux est activé, je vois (seulement) les catégories dont j’ai besoin (comme la catégorie pour le sujet actuel), mais tous les preloaded_category_custom_fields semblent manquer.

Ils apparaissent lorsque je désactive le chargement paresseux (avec toutes les autres catégories).

Donc, la bonne catégorie est préchargée mais il manque ses champs préchargés.

1 « J'aime »

Ceci a été corrigé. :white_check_mark:

Corrigé aussi. :white_check_mark:

Corrigé également. :white_check_mark:

Les autres problèmes sont en cours de résolution. Merci beaucoup pour vos commentaires, @Moin.

Cela dépend de la manière dont les catégories ont été chargées. Je suis d’accord qu’il existe probablement des chemins de code qui peuvent entraîner le chargement de données de catégorie partielles. Je communiquerai avec l’équipe à ce sujet, mais comme nous évoluons vers un état où le frontend devra demander les données dont il a besoin avant d’y accéder.

Est-ce un plugin public ? Si oui, je peux y jeter un œil. En général, les plugins les plus populaires que nous avons ont nécessité très peu de modifications pour les faire fonctionner lorsque le “chargement différé des catégories” est activé.

3 « J'aime »

La couleur de la catégorie parente est toujours manquante


2 « J'aime »

Cela se produit dans une vue de sujet normale.

La seule chose qui pourrait être spéciale est que le code se trouve dans un initialiseur, dans un widget qui est attaché au widget post-contents:before. Le plugin n’est pas public mais je peux vous donner accès si vous m’envoyez votre nom d’utilisateur Github par message privé. Alternativement, je peux vous envoyer un message privé avec un tar.gz, ce qui pourrait être plus facile. Le plugin est ancien et n’a pas été écrit à l’origine par moi, mais je ne vois rien qui soit manifestement erroné non plus.

Alors, comment cela fonctionnera-t-il ? Je peux comprendre la situation binaire où une catégorie est présente ou absente. Mais si je rencontre une catégorie sans champ personnalisé spécifique, comment savoir si le champ personnalisé est absent ou s’il n’est tout simplement pas encore complètement chargé ?

c’est-à-dire que cela ne devrait jamais arriver !

1 « J'aime »

Alors, pouvez-vous m’aider avec celui-ci @nbianca ?

Lorsque le chargement différé est activé, les champs personnalisés sont manquants dans l’objet de catégorie ici dans mon plugin public de réponses privées.

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

et je n’ai aucune idée de comment les obtenir.

J’ajoute ici le champ aux champs personnalisés de catégorie préchargés.

Site.preloaded_category_custom_fields << 'private_replies_enabled'

J’en discute avec l’équipe en interne, mais je pense que nous devrons revoir la façon dont nous préchargeons les catégories pour les sujets.

2 « J'aime »

J’ai trouvé un autre endroit où les catégories sont manquantes : les résultats de recherche IA.

2 « J'aime »

Lorsque je rafraîchis meta.discourse.org et que je sélectionne « + Nouveau sujet », le modèle de sujet ne s’affiche pas. Initialement, comme le montre la vidéo, tout fonctionne correctement. Cependant, après le rechargement, le modèle est absent. Une fois que j’ouvre à nouveau le compositeur, tout refonctionne comme prévu.

Remarque : Si vous avez Support dans votre barre latérale, vous devez le supprimer avant de recharger.

1 « J'aime »

Basé et orienté scalabilité.