L'expérience de Tecnoblog avec les commentaires Discourse

Bonjour !

Je suis vraiment enthousiaste à l’idée de cette nouvelle fonctionnalité. J’attendais une solution comme celle-ci depuis longtemps, et les premiers retours de nos lecteurs sur Tecnoblog ont été excellents — ils adorent avoir la communauté intégrée.

Cependant, après quelques tests en conditions réelles, j’ai repéré plusieurs obstacles techniques qu’il faut lever pour que cela ressemble vraiment à un système de commentaires natif et, plus important encore, pour le rendre viable pour les sites à fort trafic.

Voici ce que j’ai constaté jusqu’à présent :

1. Performance et charge serveur

Notre charge serveur a considérablement augmenté après l’intégration de l’application complète. En regardant Cloudflare, notre volume de requêtes a été multiplié par 10. Voici quelques idées pour optimiser cela :

  • Chargement différé (Lazy Loading) : Implémenter le lazy load pour le JavaScript aide beaucoup (j’utilise déjà une solution de contournement pour cela).
            <script type="text/javascript">
                DiscourseEmbed = {
                    discourseUrl: '<?php echo esc_url($discourse_url); ?>',
                    
                    <?php if ($use_topic_id): ?>
                        // Mode ID : Sujet enregistré en base, immunisé contre les changements d'URL
                        topicId: <?php echo intval($topic_id); ?>,
                    <?php else: ?>
                        // Mode URL : Solution de repli lorsque la création via API échoue
                        discourseEmbedUrl: '<?php echo esc_url($permalink); ?>',
                    <?php endif; ?>
                    fullApp: true,
                    embedHeight: '800px',
                };

                (function() {
                    var container = document.getElementById('discourse-comments');

                    // Vérifie si le navigateur prend en charge IntersectionObserver
                    if ('IntersectionObserver' in window) {
                        var observer = new IntersectionObserver(function(entries, observer) {
                            entries.forEach(function(entry) {
                                if (entry.isIntersecting) {
                                    // Lorsque le div entre dans l'écran, charge le script
                                    loadDiscourse();
                                    observer.unobserve(entry.target);
                                }
                            });
                        }, { rootMargin: "1500px" }); // Charge 1500px avant d'atteindre le div

                        observer.observe(container);
                    } else {
                        // Solution de repli pour les anciens navigateurs
                        loadDiscourse();
                    }

                    function loadDiscourse() {
                        var d = document.createElement('script'); 
                        d.type = 'text/javascript'; 
                        d.async = true;
                        d.src = window.DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
                        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
                    }
                })();
            </script>

Ici, vous pouvez voir le nombre de requêtes diminuer après l’implémentation du Lazy Load (et certaines parties du site étant toujours mises en cache, ce n’est pas le résultat final) :

  • Réduction de la charge utile : Peut-on réduire les ressources chargées dans l’intégration ? Par exemple, j’ai remarqué des requêtes pour les URL de Chat et les vérifications de crédits IA — sont-elles nécessaires pour la vue intégrée ?

  • Fréquence des requêtes : Les requêtes POST en temps réel sont un peu agressives. Peut-être pouvons-nous réduire la fréquence de sondage pour la version intégrée ?

  • Cache : Gestion améliorée du cache pour les sujets intégrés afin de gérer les pics de trafic.

2. Chaos des analyses (Analytics)

Actuellement, l’intégration déclenche les scripts Google Analytics/GTM. Cela double nos pages vues (un hit pour l’article, un autre pour l’iframe), ce qui fausse nos données. Il serait idéal que le système détecte qu’il est dans une iframe et désactive automatiquement tous les scripts de suivi (y compris ceux d’analyse de Discourse).

3. Le problème de la hauteur de l’iframe

C’est probablement le plus grand obstacle pour l’expérience utilisateur (UX). Si un article n’a pas de commentaires, il y a un étrange espace vide. S’il y a un long fil de discussion, l’iframe est coupée après les 2 ou 3 premiers commentaires, obligeant à un « défilement dans un défilement », ce qui est plutôt mauvais, surtout sur mobile.

Pour vraiment concurrencer quelque chose comme Disqus, nous avons besoin que la hauteur soit dynamique (selon le nombre de commentaires) et qu’il y ait aussi un bouton « En savoir plus » qui développe le fil après un certain nombre de réponses.

4. Conflits de plugins

Puisque l’intégration charge tous les plugins actifs, nous constatons des comportements étranges. Par exemple, « Google One Tap » apparaît à l’intérieur de l’article de blog. Lorsqu’un utilisateur se connecte, l’iframe se rafraîchit et l’emmène sur la page d’accueil de la communauté au lieu du fil de commentaires. Pouvoir désactiver manuellement des plugins spécifiques pour la vue intégrée serait une aubaine.

5. Friction de connexion

Le flux actuel est un peu un tueur de conversion : l’utilisateur clique sur se connecter → une nouvelle onglet s’ouvre → la connexion se fait → l’utilisateur reste sur la page d’accueil de la communauté. De retour sur l’article de blog, l’iframe semble toujours déconnectée jusqu’à ce que l’utilisateur rafraîchisse manuellement toute la page. C’est une boucle confuse qui pousse les gens à abandonner et à partir avant de pouvoir commenter.

Depuis que nous avons activé la nouvelle intégration, nos inscriptions quotidiennes ont plus que doublé, ce qui est super. Cependant, nos métriques d’engagement n’ont pas bougé. En fait, notre DAU/MAU a baissé — nous avons plus d’utilisateurs connectés, mais ils n’interagissent pas. Des métriques comme « Utilisateurs actifs quotidiens », « Nouveaux contributeurs » et « Publications » n’ont connu aucune augmentation.

Cela prouve que les gens veulent rejoindre la conversation, mais ils se perdent dans la boucle de connexion et abandonnent l’article avant de pouvoir réellement commenter.

6. Interface mobile (UI)

Sur mobile, la fenêtre de réponse occupe tout l’écran, vous faisant perdre tout contexte de la conversation à laquelle vous répondez. C’est un peu oppressant — tout ce que nous pouvons faire pour la garder plus compacte serait un grand succès.


Je veux vraiment faire de cela le système par défaut pour Tecnoblog (et aussi pour un autre site que nous possédons). Faites-moi savoir si vous voulez plonger plus profondément dans l’un de ces points !

8 « J'aime »

Cela sera corrigé par

6 « J'aime »

Merci pour ce retour détaillé @Thiago_Mobilon !

Je vais traiter la liste et essayer de couvrir tout, à terme.

Je viens de faire une vérification ici, et il semble que votre CSS soit mal configuré sur votre site Discourse. Vous avez deux en-têtes cache-control, et l’un d’eux est no-cache.

curl -v https://tecnoblog.net/comunidade/stylesheets/common_cd45efa28175431b0b8ff143783178d55206920b.css?__ws=tecnoblog.net -s 2>&1 | grep cache-control
< cache-control: max-age=31556952, public, immutable
< cache-control: no-store, no-cache, must-revalidate, private
4 « J'aime »

Utilisez-vous l’intégration Google Analytics native de Discourse ?

3 « J'aime »

Gestion de ces aspects dans

4 « J'aime »

Géré dans

7 « J'aime »

Je pense que Cloudflare a dû ajouter cet en-tête car j’ai contourné le cache pour le répertoire /comunidade/. Si je ne le supprime pas, il appliquera ses règles de mise en cache aux fichiers CSS et JS de Discourse, ce qui pourrait potentiellement créer des conflits plus tard.

Quoi qu’il en soit, lorsque j’ai soulevé le problème de mise en cache, c’était davantage dans le but de réduire la charge du serveur. Les fichiers CSS sont statiques, n’est-ce pas ? Si oui, le fait qu’ils ne soient pas mis en cache, bien que indésirable, n’aurait pas d’impact direct sur la charge du serveur.

2 « J'aime »

J’utilise l’intégration de Discourse avec Google Tag Manager.

1 « J'aime »

Ils affectent les performances des utilisateurs finaux, car il s’agit de 59 requêtes téléchargeant 1,43 Mo de CSS (compressé à 340 Ko) à chaque article.

De plus, ils sont également servis par le serveur Ruby, car nous nous attendons à ce que les sites ne cassent pas le cache, ce qui signifie que dans des conditions normales, cette route est très rarement utilisée.

Si je ne me trompe pas, servir ces fichiers avec un cache cassé signifie qu’ils accèdent même à la base de données.

1 « J'aime »

C’est une excellente idée, j’ajoute un support natif pour cela.

6 « J'aime »

C’est un problème plus général lié à la rédaction en déplacement, et il bénéficiera des améliorations apportées par Creating/Editing a post on mobile: let's discuss the 2026 Discourse experience.

4 « J'aime »

Nous disposons d’un cache remarquable pour les utilisateurs anonymes accédant aux pages de sujets, et il couvre également ce nouveau mode. Vous devriez donc pouvoir assurer une bonne évolutivité pour gérer les pics, tant qu’il y a suffisamment de workers Pitchfork et de workers d’E/S Redis.

2 « J'aime »

Le poolage réduit automatiquement la fréquence sur les onglets en arrière-plan ou lors d’événements de forte charge, et la même logique devrait s’appliquer ici.

2 « J'aime »

J’ai opté pour le marquage de ceux-ci dans

5 « J'aime »