Warum INP die schwierigste Metrik ist
FID war vergleichsweise leicht zu optimieren, da nur die erste Interaktion zählte. Ein schneller Seitenaufbau ohne Long Tasks reichte oft aus. INP ist fundamental anders: Es misst jede Interaktion über den gesamten Seitenbesuch. Ein Klick auf einen Filter, ein Tippen in ein Suchfeld, ein Scrollen durch ein Dropdown: Jede dieser Aktionen wird bewertet.
Der gemeldete INP-Wert ist nicht der Durchschnitt, sondern typischerweise die schlechteste Interaktion (bei wenigen Interaktionen) oder eine hohe Perzentile (bei vielen Interaktionen). Das bedeutet: Eine einzige langsame Interaktion kann den gesamten INP-Wert der Seite ruinieren. Diese Strenge macht INP zur am häufigsten verfehlten Core-Web-Vital-Metrik.
Die drei Phasen jeder Interaktion
Jede Nutzerinteraktion durchläuft drei Phasen, deren Gesamtdauer den INP-Wert bestimmt. Die obige Grafik zeigt den typischen Ablauf. Um INP zu optimieren, müssen Sie verstehen, welche Phase die meiste Zeit beansprucht.
Phase 1: Input Delay
Input Delay ist die Zeitspanne zwischen der Nutzeraktion (Klick, Tastendruck, Tippen) und dem Beginn der Verarbeitung durch den zugehörigen Event Handler. Langes Input Delay entsteht, wenn der Main Thread zum Zeitpunkt der Interaktion durch andere Aufgaben blockiert ist. Der Browser kann den Event Handler erst starten, wenn die aktuelle Aufgabe abgeschlossen ist.
Typische Verursacher von Input Delay sind Long Tasks (JavaScript-Aufgaben über 50 ms), Third-Party-Scripts, die den Main Thread belegen, Garbage Collection, Style-Recalculations und Layout-Berechnungen, die durch vorherige JavaScript-Operationen ausgelöst wurden.
Phase 2: Processing Time
Processing Time ist die Dauer der Event-Handler-Ausführung selbst. Wenn ein Click-Handler komplexe Berechnungen durchführt, DOM-Bäume traversiert, umfangreiche State-Updates auslöst oder synchrone API-Aufrufe macht, verlängert sich diese Phase. Bei modernen Single-Page-Applications kann die Processing Time erheblich sein, besonders bei Aktionen, die umfangreiche UI-Updates auslösen.
Phase 3: Presentation Delay
Presentation Delay ist die Zeit vom Ende der Event-Handler-Verarbeitung bis zum nächsten sichtbaren Frame-Update im Browser. Diese Phase umfasst Style-Recalculations, Layout-Berechnungen, Paint-Operationen und Compositing. Layout Thrashing, also das abwechselnde Lesen und Schreiben von DOM-Eigenschaften, ist der häufigste Verursacher hoher Presentation Delays.
Nutzen Sie den Chrome DevTools Performance-Tab, um die drei Phasen zu analysieren. Zeichnen Sie eine typische Interaktion auf und prüfen Sie, welche Phase den größten Anteil hat. Dort liegt das größte Optimierungspotenzial.
Long Tasks eliminieren: Der wichtigste Hebel
Long Tasks sind JavaScript-Aufgaben, die den Main Thread länger als 50 Millisekunden blockieren. Während einer Long Task kann der Browser keine Nutzerinteraktionen verarbeiten. Die Summe aller Long Tasks wird als Total Blocking Time (TBT) gemessen und korreliert direkt mit dem INP-Wert.
Long Tasks identifizieren
Chrome DevTools markiert Long Tasks im Performance-Tab als rote Balken. Die PerformanceObserver-API kann Long Tasks auch im produktiven Einsatz messen. XICTRAQ nutzt diese Daten, um Long-Task-Muster zu erkennen und deren Einfluss auf den INP zu quantifizieren.
Long Tasks aufteilen mit Yielding
Das Prinzip des Yielding besteht darin, lange JavaScript-Aufgaben in kleinere Einheiten aufzuteilen und dem Browser zwischen den Teilaufgaben die Möglichkeit zu geben, auf Nutzerinteraktionen zu reagieren.
async function processLargeList(items) {
for (let i = 0; i < items.length; i++) {
processItem(items[i]);
// Alle 5 Elemente dem Browser eine Pause geben
if (i % 5 === 0) {
await scheduler.yield();
}
}
}scheduler.yield() ist die modernste Yielding-Methode und wird von Chrome seit Version 115 unterstützt. Als Fallback können Sie setTimeout(resolve, 0) in einem Promise verwenden oder requestIdleCallback() für Aufgaben mit niedriger Priorität nutzen.
Event Handler optimieren
Schlanke Handler schreiben
Ein Event Handler sollte so wenig Arbeit wie möglich auf dem Main Thread erledigen. Rechenintensive Operationen gehören in Web Worker, Netzwerkanfragen sollten asynchron sein, und visuelle Updates sollten über requestAnimationFrame() gebatcht werden.
- Web Worker nutzen: Verlagern Sie Sortierung, Filterung und Berechnung in einen Web Worker. Der Main Thread bleibt frei für Nutzerinteraktionen.
- Debouncing und Throttling: Begrenzen Sie die Ausführungsfrequenz von Scroll-, Resize- und Input-Handlern. Nicht jedes Scroll-Event braucht eine sofortige Reaktion.
- Asynchrone Operationen: Verwenden Sie
fetchmitasync/awaitstatt synchroner XMLHttpRequests. Synchrone Netzwerkanfragen blockieren den Main Thread komplett. - DOM-Operationen minimieren: Bündeln Sie DOM-Änderungen und führen Sie sie in einem einzigen Reflow durch. Document Fragments helfen bei der effizienten DOM-Manipulation.
requestAnimationFrame für visuelle Updates
Wenn ein Event Handler visuelle Änderungen vornimmt, sollte er diese über requestAnimationFrame() (rAF) einplanen. rAF synchronisiert die Änderungen mit dem nächsten Frame-Update des Browsers und verhindert unnötige Zwischenberechnungen. Das reduziert die Presentation Delay und sorgt für flüssige Animationen.
Layout Thrashing vermeiden
Layout Thrashing ist einer der häufigsten und am schwersten zu diagnostizierenden INP-Killer. Es entsteht, wenn JavaScript abwechselnd DOM-Elemente verändert (schreibt) und Layout-Eigenschaften ausliest (liest). Jeder Lesevorgang nach einem Schreibvorgang erzwingt eine sofortige Layout-Neuberechnung, die den Main Thread blockiert.
// SCHLECHT: Abwechselndes Lesen und Schreiben
elements.forEach(el => {
const height = el.offsetHeight; // Lesen -> erzwingt Layout
el.style.height = height + 10 + 'px'; // Schreiben
});
// GUT: Erst alle lesen, dann alle schreiben
const heights = elements.map(el => el.offsetHeight); // Alle lesen
elements.forEach((el, i) => {
el.style.height = heights[i] + 10 + 'px'; // Alle schreiben
});Layouteigenschaften, die eine Neuberechnung erzwingen, umfassen unter anderem offsetHeight, offsetWidth, scrollTop, clientHeight, getBoundingClientRect() und getComputedStyle(). Vermeiden Sie das Auslesen dieser Eigenschaften innerhalb von Schleifen, die auch DOM-Änderungen vornehmen.
Third-Party-Scripts und INP
Externe Scripts sind einer der Hauptverursacher schlechter INP-Werte. Analytics-Scripts, Werbe-Scripts, Chat-Widgets und Social-Media-Einbettungen registrieren eigene Event Listener und führen eigene Aufgaben auf dem Main Thread aus. Jedes dieser Scripts verlängert potenziell den Input Delay für Nutzerinteraktionen.
- Laden Sie Scripts mit defer oder async: So blockieren sie nicht das initiale Parsing und Rendering
- Priorisieren Sie nach Wichtigkeit: Geschäftskritische Scripts zuerst, Marketing-Pixel später
- Entfernen Sie nicht benötigte Scripts: Jedes Script, das seit Monaten keine Kampagne mehr unterstützt, belastet unnötig den Main Thread. Mehr dazu im Artikel über Third-Party-Scripts.
- Nutzen Sie Intersection Observer: Laden Sie Chat-Widgets und Social-Media-Buttons erst, wenn der Nutzer zu ihnen scrollt
XICTRAQ erkennt alle Third-Party-Scripts auf Ihrer Website und quantifiziert deren Einfluss auf die Main-Thread-Auslastung. So identifizieren Sie Scripts, die den INP-Wert am stärksten belasten, und können gezielt optimieren oder entfernen.
Progressive Enhancement und native HTML-Elemente
Viele JavaScript-Implementierungen lassen sich durch native HTML-Elemente ersetzen, die ohne Main-Thread-Belastung sofort reagieren. Das ist nicht nur für INP vorteilhaft, sondern verbessert auch die Barrierefreiheit und reduziert die Codekomplexität.
<details>/<summary>statt JavaScript-Accordion: Reagiert sofort, keine Main-Thread-Last<dialog>statt Custom-Modal: Native Modals haben eingebautes Fokus-Management- Native Formularvalidierung statt clientseitiger Validierungsbibliotheken
- CSS-Animationen statt JavaScript-Animationen: CSS-Animationen laufen auf dem Compositor-Thread
<input type="color/date/range">statt Custom-Picker: Native Picker sind sofort responsiv
Code-Splitting und Lazy-Loading von JavaScript
Je weniger JavaScript eine Seite laden und ausführen muss, desto besser der INP. Code-Splitting teilt Ihre Anwendung in Chunks auf, die nur bei Bedarf geladen werden. Route-basiertes Splitting lädt nur den Code für die aktuelle Seite. Component-basiertes Splitting lädt komplexe UI-Komponenten erst bei Interaktion.
// Statt statischem Import
// import { HeavyChart } from './HeavyChart';
// Lazy Import bei Bedarf
button.addEventListener('click', async () => {
const { HeavyChart } = await import('./HeavyChart');
HeavyChart.render(container);
});Frameworks wie SvelteKit bieten Code-Splitting standardmäßig. Jede Route erhält automatisch ein eigenes Bundle, und gemeinsame Abhängigkeiten werden in Shared Chunks extrahiert. Das Ergebnis: minimale JavaScript-Last pro Seite, was den INP direkt verbessert.
INP messen: Feld- und Labordaten
INP kann nur durch Felddaten zuverlässig bewertet werden, da Labortests die Vielfalt realer Nutzerinteraktionen nicht abbilden. Lighthouse misst TBT (Total Blocking Time) als Proxy für INP, aber TBT und INP sind nicht identisch.
Chrome UX Report, PageSpeed Insights, XICTRAQ. Zeigen die tatsächliche INP-Erfahrung realer Nutzer über 28 Tage.
Chrome DevTools, Lighthouse (TBT). Nützlich zur Diagnose, aber nicht identisch mit realen INP-Werten.
Für die Diagnose verwenden Sie Chrome DevTools: Öffnen Sie den Performance-Tab, aktivieren Sie Web Vitals, und zeichnen Sie typische Interaktionen auf. Das Panel zeigt Input Delay, Processing Time und Presentation Delay für jede Interaktion separat an.
INP-Optimierung für verschiedene Website-Typen
Formulare und Checkout-Seiten
Formulare sind interaktionsintensiv. Jeder Tastendruck, jede Feldvalidierung und jeder Schritt im Checkout wird von INP erfasst. Nutzen Sie native Formularvalidierung statt JavaScript-Bibliotheken. Validieren Sie Felder asynchron nach Verlust des Fokus (blur), nicht bei jedem Tastendruck. Halten Sie Checkout-Schritte schlank und laden Sie nur den Code für den aktuellen Schritt.
Filter und Produktkonfiguratoren
Filter-Funktionen in Online-Shops und Produktkonfiguratoren lösen häufig komplexe UI-Updates aus: Produktlisten werden neu sortiert, Preise neu berechnet, Bilder gewechselt. Nutzen Sie virtuelles Scrolling für lange Listen, berechnen Sie Filter-Ergebnisse in einem Web Worker und zeigen Sie sofort einen Lade-Indikator an, um dem Nutzer visuelles Feedback zu geben, während die Aktualisierung läuft.
Content-reiche Seiten mit vielen Interaktionen
Nachrichtenportale, Social-Media-Feeds und Dashboards haben viele interaktive Elemente: Accordions, Tabs, Share-Buttons, Kommentar-Felder. Jedes Element registriert Event Listener, die den Main Thread belasten. Nutzen Sie Event Delegation (einen Listener auf dem Elternelement statt auf jedem Kind-Element) und implementieren Sie Lazy-Loading für Interaktionscode, der erst bei Sichtbarkeit benötigt wird.
INP im Zusammenspiel mit LCP und CLS
INP existiert nicht isoliert. Eine Optimierung, die INP verbessert, kann theoretisch LCP oder CLS verschlechtern, wenn sie nicht sorgfältig umgesetzt wird. Aggressives Code-Splitting kann die Reaktionsfähigkeit verbessern, aber zu zusätzlichen Netzwerkanfragen führen, die den LCP verschlechtern. Das Entfernen von Preload-Hints für Third-Party-Scripts verbessert den INP, kann aber CLS verschlechtern, wenn ein Script für die Layout-Stabilität benötigt wird.
XICTRAQ überwacht alle drei Core Web Vitals gleichzeitig und zeigt Ihnen, wie Änderungen sich auf das Gesamtbild auswirken. Die Reporting-Funktion erstellt Berichte, die Veränderungen aller drei Metriken korrelieren, damit Sie Trade-offs erkennen und vermeiden.
Priorisierte Maßnahmen-Checkliste
- Long Tasks mit Chrome DevTools identifizieren und mit Yielding aufteilen
- Third-Party-Scripts evaluieren und nicht benötigte Scripts entfernen
- Event Handler schlank halten und rechenintensive Logik in Web Worker verlagern
- Layout Thrashing durch Bündeln von DOM-Lese- und Schreibvorgängen vermeiden
- Native HTML-Elemente statt JavaScript-Widgets verwenden
- Code-Splitting und Lazy-Loading für interaktive Komponenten implementieren
- Debouncing und Throttling für Scroll- und Input-Handler einsetzen
- requestAnimationFrame für visuelle Updates nutzen
- Kontinuierliches INP-Monitoring mit XICTRAQ einrichten
Kontinuierliches INP-Monitoring einrichten
Da INP die Reaktionsfähigkeit über alle Nutzerinteraktionen hinweg misst, kann sich der Wert mit jedem Deployment, jeder Code-Änderung und jedem neuen Plugin verschlechtern. XICTRAQ überwacht Ihre Core Web Vitals einschließlich INP kontinuierlich und warnt Sie bei Verschlechterungen.
Die Kombination aus Performance-Monitoring, Third-Party-Script-Erkennung, regelmäßigen Lighthouse-Audits und dem SEO-Monitoring gibt Ihnen die Werkzeuge, um INP-Probleme nicht nur zu erkennen, sondern auch deren Ursache schnell zu identifizieren. Starten Sie jetzt mit einer kostenlosen Demo oder registrieren Sie sich für das kontinuierliche Monitoring Ihrer Website.
Was genau misst INP?
Warum verfehlen so viele Websites den INP-Schwellenwert?
Was ist der Unterschied zwischen INP und TBT?
Wie finde ich heraus, welche Phase meinen INP verschlechtert?
Hilft ein CDN bei der INP-Optimierung?
Welche Frameworks bieten die beste INP-Performance?
Dieser Artikel basiert auf Daten von: Core Web Vitals (Google).