Je souhaiterais suggérer l’ajout d’une profondeur maximale d’imbrication pour la fonctionnalité intégrée [details], ou l’introduction d’un paramètre de site permettant aux administrateurs de configurer cette limite.
Le problème
Récemment, un utilisateur de mon forum Discourse a créé un message contenant 24 niveaux de sections [details] imbriquées.
Cela a causé plusieurs problèmes :
- Performance du navigateur : Les utilisateurs ont signalé que le développement de plusieurs niveaux rendait Firefox extrêmement lent ou non réactif.
- Délais d’attente de l’endpoint Markdown : L’accès à l’endpoint
.mddu sujet est devenu extrêmement lent. Nous avons observé des requêtes prenant 19,8 secondes et 31,1 secondes. - Erreurs serveur : L’endpoint Markdown renvoyait parfois une page d’erreur « Oops ». Les journaux Discourse affichaient également des avertissements de délai d’attente du travailleur Pitchfork lors de la conversion Markdown.
- Épuisement potentiel des ressources : Étant donné que les moteurs de recherche et les robots d’IA demandent fréquemment les endpoints
.md, un message fortement imbriqué pourrait déclencher répétitivement un traitement coûteux et consommer les ressources du serveur.
Après la suppression du message problématique, l’endpoint Markdown a renvoyé HTTP 200 et a répondu en environ 1,7 seconde.
Le sujet affecté était :
https://meta.appinn.net/t/topic/87672
(La réponse problématique a déjà été supprimée.)
Amélioration suggérée
Je pense qu’il serait utile de :
- Limiter l’imbrication de
[details]à une profondeur raisonnable, telle que 2 ou 3 niveaux. - Ajouter un paramètre de site, tel que
details_max_nesting_depth, permettant aux administrateurs de configurer la profondeur maximale d’imbrication.
Pour la compatibilité ascendante, le paramètre pourrait par défaut être illimité, tout en permettant aux administrateurs d’appliquer une limite si nécessaire.
Si les utilisateurs dépassent la limite configurée, Discourse pourrait rejeter le message avec un message de validation clair.
Solution temporaire : un plugin
J’ai créé un petit plugin qui limite l’imbrication de [details] à un maximum de 2 niveaux :
GitHub - scavin/discourse-details-depth-limit · GitHub
Le plugin valide les messages côté serveur et rejette les messages contenant plus de deux niveaux de sections repliables imbriquées.
Je l’ai testé avec succès dans mon environnement de développement local Discourse.
Pour les administrateurs rencontrant des problèmes similaires, ce plugin peut servir de solution temporaire jusqu’à ce qu’une solution officielle soit disponible.
Je crois qu’une limite configurable dans le plugin Details intégré serait une mesure de sécurité utile contre l’imbrication accidentelle ou excessive.
