Ladezeiten optimieren

Drittanbieter-Skripte messen und zum passenden Zeitpunkt laden

Ein kleiner Lader bedeutet keine günstige Funktion: Messen Sie die gesamte Interaktion.

Externe Dienstblöcke sind mit einer Webseite verbunden; ein schwererer Block zeigt zusätzliche Leistungskosten.

Reduzieren Sie die Kosten von Drittanbieter-Skripten, indem Sie die geladenen Dienste erfassen, ihre Wirkung auf konkrete Aufgaben messen und unnötige Arbeit entfernen oder später ausführen. async und defer verändern den Zeitpunkt, beseitigen aber keine Ausführungskosten. Eine brauchbare Prüfung reicht deshalb über das Laden hinaus: Einwilligung, Produktauswahl, Suche und Support gehören dazu.

Ein Skript kann wirtschaftlich sinnvoll sein und trotzdem zum falschen Zeitpunkt laden. Entscheidend ist, welche Seiten und Interaktionen es benötigen, wer dafür verantwortlich ist und wie die Website bei einem Ausfall des Dienstes funktioniert.

Erfassen Sie auch indirekt hinzugefügte Skripte

Beginnen Sie mit repräsentativen Vorlagen: Landingpage, Artikel, Produktseite und gegebenenfalls Einstieg in den Checkout. Zeichnen Sie im Network-Panel der Chrome DevTools einen frischen Seitenaufruf auf. Prüfen Sie Domains, Ressourcentypen und Initiatoren. Ein kleines Startskript kann viele Abhängigkeiten nachladen. Erfassen Sie den Dienst samt Folgeanfragen, statt nur seine erste Datei zu bewerten.

Wiederholen Sie den Test nach der Zustimmung zu optionalem Tracking, beim Öffnen des Chats und beim Start eingebetteter Medien. Vergleichen Sie den Zustand vor der Einwilligung. Erfasst werden Tag-Manager-Container, direkt eingebundene Tags, Apps, Frames und vom CMS ergänzter Code. Eine Domainliste zeigt nicht zuverlässig die Zuständigkeit: Auch eine eigene URL kann Herstellercode ausliefern.

Notieren Sie je Dienst Zweck, Verantwortliche, betroffene Vorlagen, Ladeauslöser und Entfernungsschritte. Halten Sie übertragene Daten, CPU-Arbeit und sichtbares Verhalten getrennt fest. Eine kleine Datei kann viel Rechenarbeit verursachen. Große Medienübertragungen können dagegen Bandbreite beanspruchen, ohne dasselbe JavaScript-Ausführungsverhalten zu zeigen.

Sammeln Sie keine Kundenkennungen. Ein reproduzierbarer Test benötigt Szenario und Konfiguration, keine privaten Checkout-Daten. Speichern Sie bereinigte Aufzeichnungen und dokumentieren Sie Browserversion, Ansichtsgröße, Netzwerkeinstellungen und Einwilligungsstatus.

Vergleichen Sie kontrollierte Durchläufe vor der Zuordnung

Erstellen Sie eine Ausgangsmessung und blockieren Sie anschließend eine verdächtige URL oder Domain mit der Anfrageblockierung der DevTools. Laden Sie neu und führen Sie dieselben Aktionen aus. Heben Sie die Sperre auf und wiederholen Sie den Vergleich. Mehrere Durchläufe unter gleichen Bedingungen berücksichtigen wechselnde Anbieterantworten, Cachezustände und Hintergrundarbeit.

Das Blockieren ist ein Diagnoseexperiment. Verschwindet ein Produktkonfigurator, ist das schnellere Ergebnis keine akzeptable Ersatzlösung. Dokumentieren Sie die fehlende Funktion gemeinsam mit dem Messunterschied. Ein blockierter Tag-Manager entfernt möglicherweise mehrere Anbieter gleichzeitig. Untersuchen Sie diese einzeln, bevor Sie den gesamten Unterschied dem Container zuschreiben.

Lesen Sie Performance-Aufzeichnung und Wasserfalldiagramm zusammen. Suchen Sie lange Tasks und prüfen Sie die zugehörigen Funktionen, Skript-URLs und Interaktionen. Bei trägen Reaktionen hilft der INP-Diagnoseablauf. Ein gewöhnlicher Lighthouse-Navigationstest erklärt Lade- und Blockierungsarbeit, bildet aber keinen vollständigen Kundenbesuch ab.

Ältere Berichte enthalten die Prüfung „Reduce the impact of third-party code“. Laut Chrome-Dokumentation wurde diese eigenständige Prüfung mit Lighthouse 13 verlagert. Ihr früherer Auslöser bei 250 ms ist kein allgemeines Performancebudget. Auch die Prüfungsnamen können sich unterscheiden. Beachten Sie die Berichtsversion und verbinden Sie aktuelle Diagnosen mit Browseraufzeichnungen.

Wählen Sie den frühesten tatsächlich benötigten Ladezeitpunkt

Die Ladestrategie muss zur Funktion passen. Der folgende Vergleich betrifft klassische externe Skripte; Module haben ein anderes Standardverhalten.

Strategie Geeignet, wenn Verbleibende Kosten oder Risiken
Integration entfernen Der Zweck entfällt oder doppelt abgedeckt ist Abhängige Abläufe prüfen
defer Geparstes HTML und geordnete Ausführung nötig sind Belegt weiterhin den Hauptthread
async Keine Abhängigkeit von der Dokumentreihenfolge besteht Kann wichtige Seitenarbeit unterbrechen
Nahe dem sichtbaren Bereich laden Einbettung erst weiter unten gebraucht wird Download kann vor dem Bedarf beginnen
Nach bewusster Aktivierung laden Video, Karte oder Chat optional sind Wartezeit nach der Aktivierung
Nach passender Einwilligung laden Der konfigurierte Dienst diese benötigt Zustimmung kann viele Arbeiten zugleich auslösen

Prüfen Sie vor Attributänderungen die Integrationsdokumentation. Ein Inline-Initialisierer, der eine bereits vorhandene Bibliothek erwartet, kann beim asynchronen Laden scheitern. Die Fehlermeldung zu unterdrücken reicht nicht. Prüfen Sie, ob Ereignisse genau einmal, in richtiger Reihenfolge und mit korrektem Einwilligungsstatus ankommen.

Vermeiden Sie pauschale Regeln wie „alle Tags nach der ersten Interaktion laden“. Damit verschieben Sie Arbeit womöglich genau auf den Klick, der schnell reagieren soll. Ein willkürlicher Timer beweist ebenfalls keinen günstigen Zeitpunkt. Reduzieren Sie zuerst Tags, begrenzen Sie die betroffenen Seiten und vereinfachen Sie Funktionen.

Ersetzen Sie optionale Einbettungen durch eine zugängliche Fassade

Eine Fassade zeigt eine leichte Darstellung der Funktion und lädt die eigentliche Einbettung erst auf Anforderung. Googles Empfehlungen für Einbettungen beschreiben dieses Muster. Es vermeidet Initialisierungen für Menschen, die die Funktion nie verwenden.

Das folgende HTML-Beispiel erstellt einen per Tastatur bedienbaren Button und reserviert Platz für den Frame. Ersetzen Sie die Beispieladresse durch eine freigegebene, einbettbare URL und lokalisieren Sie die sichtbaren Beschriftungen.

html
<div class="media-slot" id="media-slot">
  <button type="button" id="load-media">Load product video</button>
</div>
<p id="media-status" role="status"></p>
<style>
  .media-slot { aspect-ratio: 16 / 9; background: #edf2f7; }
  .media-slot iframe { width: 100%; height: 100%; border: 0; }
</style>
<script type="module">
  const button = document.querySelector('#load-media');
  const slot = document.querySelector('#media-slot');
  const status = document.querySelector('#media-status');
  button.addEventListener('click', () => {
    button.disabled = true;
    status.textContent = 'Loading video';
    const frame = document.createElement('iframe');
    frame.title = 'Product video';
    frame.src = 'https://example.com/embed/product-video';
    frame.allowFullscreen = true;
    frame.addEventListener('load', () => {
      status.textContent = 'Video frame loaded';
    });
    slot.replaceChildren(frame);
    frame.focus();
  }, { once: true });
</script>

Dies ist ein Lademuster, keine vollständige Playerintegration. Das load-Ereignis beweist nicht, dass ein Player anderer Herkunft nutzbar ist. Verwenden Sie gegebenenfalls die Bereitschafts-API des Anbieters. Ergänzen Sie produktiv einen normalen Ersatzlink und eine Wiederherstellungsmöglichkeit. Berücksichtigen Sie Content Security Policy, Berechtigungen und erforderliche Einwilligungen vor dem Erzeugen des Frames.

Das reservierte Seitenverhältnis muss zur fertigen Einbettung passen. Sonst tauschen Sie eine langsamere Anfangsladung gegen einen sichtbaren Sprung. Wenden Sie dasselbe Prinzip auf Werbung und Chatfenster an; dabei hilft die Anleitung zum Verhindern von Layoutverschiebungen. Testen Sie Tastaturbedienung und nachvollziehbaren Fokus nach dem Austausch.

Laden Sie den Chat einmal und behandeln Sie Fehler

Für skriptbasierte Widgets verhindert eine gemeinsame Lade-Promise doppelte Skripte nach wiederholten Klicks. Das Beispiel zeigt nur den Lader. Anbieteradresse und Bereitschaftssignal müssen angepasst werden: Ein heruntergeladenes Skript bedeutet noch keinen einsatzbereiten Chat.

js
let chatScriptPromise;

export function loadChatScript() {
  if (chatScriptPromise) return chatScriptPromise;
  chatScriptPromise = new Promise((resolve, reject) => {
    const script = document.createElement('script');
    script.src = 'https://example.com/widgets/chat.js';
    script.async = true;
    script.onload = () => resolve();
    script.onerror = () => {
      script.remove();
      chatScriptPromise = undefined;
      reject(new Error('Chat script could not be loaded'));
    };
    document.head.append(script);
  });
  return chatScriptPromise;
}

Rufen Sie die Funktion aus dem Klick-Handler des Chatbuttons nach der Berechtigungsprüfung auf. Zeigen Sie den Ladezustand, behandeln Sie Fehler und bieten Sie einen alternativen Kontaktweg. Verhindern Sie wiederholte Aktivierung während des Ladens und öffnen Sie das Widget über seine dokumentierte API. Erfinden Sie weder globale Methodennamen noch erfolgreiche Initialisierungen.

Messen Sie die erste Aktivierung und spätere Nachrichten. Ein kleiner Lader macht das Widget selbst nicht günstig. Führt der Anbieter einen langen synchronen Start aus, fragen Sie nach einer kleineren Integration oder einer unterstützten stufenweisen Initialisierung. Die Anleitung zur Verringerung der JavaScript-Ausführungszeit trennt geringere Codemengen von besserer zeitlicher Planung.

Prüfen Sie Einwilligungsänderungen als eigene Szenarien

Testen Sie mindestens drei Wege: ohne optionale Zustimmung, mit Zustimmung und mit später geänderter Entscheidung. Prüfen Sie neben dem Banner auch die Netzwerkanfragen. Ein korrekt aussehendes Banner kann neben einer Integration stehen, die das Theme bereits an anderer Stelle gestartet hat.

Einwilligungssteuerung und Ladesteuerung hängen zusammen, sind aber nicht identisch. Verwenden Sie die freigegebene Richtlinie der Website und den unterstützten Anbietermodus. defer verhindert keine Datenerhebung. Benötigt eine Funktion Zustimmung, setzen Sie die Prüfung vor ihre Initialisierung. Das Öffnen eines Videos oder Chats erteilt nicht automatisch sämtliche denkbaren Anbieterberechtigungen.

Aktualisieren Sie nach Zustimmung die sichtbare Oberfläche zügig. Initialisieren Sie nicht alle optionalen Funktionen im selben synchronen Handler. Bewahren Sie notwendige Ereignisreihenfolgen und dokumentieren Sie durch verzögerte Analytik fehlende Messungen. Ein kleinerer Datensatz kann ein bewusster Kompromiss sein; identische Erfassung ohne Nachweis zu behaupten ist es nicht.

Testen Sie Ablehnung und Widerruf. Das Entfernen eines Skriptelements macht ausgeführten Code, Timer oder Anfragen nicht rückgängig. Nutzen Sie die Bereinigungs- und Einwilligungsschnittstellen des Anbieters. Diese Implementierungsprüfung ist keine Zusicherung rechtlicher Konformität in jeder Rechtsordnung.

Verhindern Sie eine zweite Anwendung im Tag-Manager

Exportieren oder prüfen Sie die Containerkonfiguration mit dem zuständigen Team. Suchen Sie doppelte Analytikinstallationen, beendete Kampagnen, breite Auslöser für alle Seiten, wiederholtes benutzerdefiniertes HTML und zu häufig aktive Listener. Prüfen Sie, ob eine Plattform-App dasselbe Ereignis bereits sendet.

Vereinbaren Sie den Ereignisvertrag, bevor Sie Auslöser ändern. Bei einem Kauf gehören dazu Name, Versandpunkt und Kennung zur Deduplizierung, ohne echte Bestelldaten in die Dokumentation aufzunehmen. Prüfen Sie Anbietertools und Netzwerkprotokoll. Eine schnellere Seite mit doppelt gezählten Transaktionen ist keine fertige Lösung.

Serverseitiges Tagging kann bestimmte Verarbeitungsschritte verlagern, entfernt aber nicht automatisch Browserkollektoren. Behandeln Sie es als Architekturänderung mit eigenen Daten- und Betriebsanforderungen. Messen Sie den verbleibenden Browsercode, statt eine kostenlose Clientseite anzunehmen.

Entscheiden Sie bewusst über Selbsthosting und Anbieterwechsel

Selbsthosting kann Verbindungen und Cacheverhalten verändern, reduziert jedoch nicht automatisch die Rechenarbeit. Prüfen Sie Lizenz, Aktualisierungsverfahren und Anbieteranforderungen vor dem Kopieren. Benennen Sie Verantwortliche für Sicherheit und Kompatibilität. Eine eingefrorene Datei bleibt keine tragfähige Optimierung, wenn sich die entfernte API ändert.

Verbergen Sie den Hauptinhalt nicht unbegrenzt während des Wartens auf einen Experimentierdienst. Vereinbaren Sie einen akzeptablen Ersatzablauf und testen Sie langsame Antworten sowie Ausfälle. Stimmen Sie Änderungen an Zahlungen, Identität oder Missbrauchsschutz mit den Zuständigen ab und prüfen Sie den vollständigen Ablauf. Das Ziel ist belastbare Funktionalität, nicht das Löschen aller Abhängigkeiten bis zum grünen Wert.

Geben Sie jeder neuen Integration Verantwortung und einen Ausstieg

Erstellen Sie mit der Performance-Checkliste vor der Aktivierung einen Eintrag. Dokumentieren Sie Zweck, Seiten, Auslöser, Nutzenbelege, Tests, Rücknahme und Prüftermin. Benennen Sie eine Person oder ein Team innerhalb Ihrer Organisation. Einträge ohne Zuständigkeit lassen sich später schwer ausmustern.

Leiten Sie Budgets aus Ausgangsmessung und Geschäftsanforderungen ab: Übertragungsgröße, Hauptthreadarbeit und betroffene Interaktionen. Eine universelle Drittanbietergrenze gibt es nicht. Prüfen Sie nach Veröffentlichung echte Nutzungsdaten nach Vorlage und Einwilligungsstatus. Die Anleitungen zur Seitengeschwindigkeit helfen bei verbleibenden Bild-, CSS- oder eigenen Codeproblemen.

Beginnen Sie mit der teuersten Integration, deren Zweck unklar ist. Reproduzieren Sie ihre Kosten, klären Sie den Bedarf und entfernen oder begrenzen Sie sie reversibel. Testen Sie anschließend erneut die Aufgabe, die Besucher erledigen möchten.

Passende Anleitungen