Die Erfahrung von Tecnoblog mit Discourse-Kommentaren

Hallo!

Ich bin wirklich begeistert von diesem neuen Feature. Ich warte schon lange auf eine solche Lösung, und das erste Feedback unserer Leser auf Tecnoblog war großartig – sie lieben die Integration der Community.

Nach einigen Tests im echten Einsatz habe ich jedoch ein paar technische Hürden festgestellt, die wir überwinden müssen, damit sich das System wie eine wirklich native Kommentarfunktion anfühlt und vor allem für hochfrequentierte Seiten nachhaltig ist.

Hier ist, was ich bisher festgestellt habe:

1. Performance und Serverlast

Unsere Serverlast ist nach dem Einbetten der vollständigen App erheblich angestiegen. Laut Cloudflare hat sich unser Anfragevolumen verzehnfacht. Hier ein paar Ideen zur Optimierung:

  • Lazy Loading: Die Implementierung von Lazy Loading für das JavaScript hilft sehr (ich verwende bereits eine Workaround-Lösung dafür).
            <script type="text/javascript">
                DiscourseEmbed = {
                    discourseUrl: '<?php echo esc_url($discourse_url); ?>',
                    
                    <?php if ($use_topic_id): ?>
                        // ID-Modus: Thema in der Datenbank gespeichert, immun gegen URL-Änderungen
                        topicId: <?php echo intval($topic_id); ?>,
                    <?php else: ?>
                        // URL-Modus: Fallback, wenn die Erstellung über die API fehlschlägt
                        discourseEmbedUrl: '<?php echo esc_url($permalink); ?>',
                    <?php endif; ?>
                    fullApp: true,
                    embedHeight: '800px',
                };

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

                    // Prüft, ob der Browser IntersectionObserver unterstützt
                    if ('IntersectionObserver' in window) {
                        var observer = new IntersectionObserver(function(entries, observer) {
                            entries.forEach(function(entry) {
                                if (entry.isIntersecting) {
                                    // Wenn das Div in den sichtbaren Bereich kommt, wird das Skript geladen
                                    loadDiscourse();
                                    observer.unobserve(entry.target);
                                }
                            });
                        }, { rootMargin: "1500px" }); // Lädt 1500px bevor das Div erreicht wird

                        observer.observe(container);
                    } else {
                        // Fallback für ältere Browser
                        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>

Hier sieht man, wie die Anzahl der Anfragen nach der Implementierung von Lazy Loading sinkt (einige Teile der Website waren noch zwischengespeichert, daher ist dies noch nicht das Endergebnis):

  • Reduzierung der Nutzlast: Können wir die im Embed geladenen Ressourcen verringern? Beispiel: Ich habe Abfragen für Chat-URLs und AI-Credit-Checks bemerkt – sind diese für die Embed-Ansicht wirklich notwendig?

  • Anfragehäufigkeit: Die Echtzeit-POST-Anfragen sind etwas zu aggressiv. Könnten wir die Polling-Häufigkeit für die Embed-Version reduzieren?

  • Caching: Verbessertes Cache-Management für eingebettete Themen, um Traffic-Spitzen besser zu bewältigen.

2. Analytics-Chaos

Derzeit feuert das Embed Google Analytics/GTM-Skripte ab. Das verdoppelt unsere Seitenaufrufe (ein Treffer für den Beitrag, ein weiterer für das Iframe), was unsere Daten verfälscht. Es wäre ideal, wenn das System erkennen könnte, dass es sich in einem Iframe befindet, und automatisch alle Tracking-Skripte (einschließlich Discourse-Analytics) deaktivieren würde.

3. Das Iframe-Höhen-Problem

Das ist wahrscheinlich die größte Hürde für die Benutzererfahrung. Wenn ein Beitrag keine Kommentare hat, entsteht eine seltsame Lücke. Bei langen Threads wird das Iframe bereits nach den ersten 2 oder 3 Kommentaren abgeschnitten, was ein „Scrollen innerhalb eines Scrollens

8 „Gefällt mir“

[quote=“Thiago_Mobilon, Beitrag: 17, Thema: 399743”]
Beispielsweise erscheint „Google One Tap

6 „Gefällt mir“

Danke für das detaillierte Feedback @Thiago_Mobilon!

Ich werde die Liste durchgehen und versuchen, alles nach und nach abzudecken.

Ich habe hier gerade eine Überprüfung durchgeführt, und es scheint, als wäre dein CSS auf deiner Discourse-Seite falsch konfiguriert. Du hast doppelte cache-control-Header, und einer davon ist 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 „Gefällt mir“

Nutzt ihr die integrierte Google Analytics-Funktion von Discourse?

3 „Gefällt mir“

Die Handhabung dieser Aspekte erfolgt in

4 „Gefällt mir“

Behandelt in

7 „Gefällt mir“

Ich glaube, Cloudflare hat diesen Header hinzugefügt, weil ich den Cache für das Verzeichnis /comunidade/ umgangen habe. Wenn ich ihn nicht entferne, wendet Cloudflare seine Caching-Regeln auf das Discourse-CSS und -JS an, was später zu Konflikten führen könnte.

Wie auch immer, als ich das Caching-Problem angesprochen habe, ging es mir vor allem darum, die Serverlast zu reduzieren. Die CSS-Dateien sind statisch, oder? Wenn ja, hätte die Tatsache, dass sie nicht gecacht werden, obwohl dies unerwünscht ist, keine direkte Auswirkung auf die Serverlast.

2 „Gefällt mir“

Ich nutze die Discourse-Integration mit Google Tag Manager.

1 „Gefällt mir“

Sie beeinträchtigen jedoch die Leistung für Endnutzer, da bei jedem Artikel 59 Anfragen gestellt werden, die insgesamt 1,43 MB CSS herunterladen (komprimiert auf 340 KB).

Außerdem werden sie vom Ruby-Server bereitgestellt, da wir davon ausgehen, dass Seiten den Cache nicht beschädigen. Unter normalen Umständen wird diese Route daher sehr selten genutzt.

Wenn ich mich nicht irre, führt das Bereitstellen dieser Dateien bei einem beschädigten Cache sogar zu Datenbankzugriffen.

1 „Gefällt mir“

Das ist eine großartige Idee, ich füge native Unterstützung dafür hinzu

6 „Gefällt mir“

Das ist ein allgemeineres Problem beim Verfassen von Beiträgen unterwegs und wird von Verbesserungen profitieren, die unter Creating/Editing a post on mobile: let's discuss the 2026 Discourse experience diskutiert werden.

4 „Gefällt mir“

Wir verfügen über einen hervorragenden Cache für anonyme Nutzer, die auf Themenseiten zugreifen, der auch diesen neuen Modus abdeckt. Sie sollten daher in der Lage sein, Spitzen gut zu bewältigen, solange genügend Pitchfork-Worker und Redis-I/O-Worker vorhanden sind.

2 „Gefällt mir“

Das Pooling drosselt sich automatisch in Hintergrund-Tabellen oder bei Ereignissen mit hoher Last, und dasselbe sollte hier gelten.

2 „Gefällt mir“

Habe mich dafür entschieden, diese zu markieren.

5 „Gefällt mir“