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
