Flame Charts, Call Tree und Long Tasks richtig lesen
Ein Recording im Performance Panel sieht auf den ersten Blick nach einem bunten Balkendiagramm aus. Wer Flame Chart, Call Tree, Bottom Up und Event Log kombiniert, findet aber die tatsächliche Ursache von Rucklern, blockiertem Main Thread und schlechten Web Vitals, statt nur Symptome zu behandeln.
Inhaltsverzeichnis
- 1. Warum das Performance Panel unverzichtbar ist
- 2. Ein Recording starten: Optionen und Screenshots
- 3. Den Flame Chart lesen: Stack, Breite und Farbe
- 4. Call Tree und Bottom Up: zwei Blickwinkel auf dieselben Daten
- 5. Main Thread Aktivität: Scripting, Rendering, Painting
- 6. Long Tasks im Trace erkennen und einordnen
- 7. Web Vitals Marker: LCP, CLS und INP im Recording
- 8. CPU Throttling, Netzwerk-Simulation und Custom Marks
- 9. Performance Panel im Vergleich zu anderen Tools
- 10. Zusammenfassung
- 11. FAQ
1. Warum das Performance Panel unverzichtbar ist
Das Performance Panel in Chrome DevTools ist das einzige Werkzeug, das eine vollständige Zeitleiste aller Aktivitäten in einer Webseite aufzeichnet, von JavaScript Ausführung über Style Recalculation, Layout und Paint bis hin zu Netzwerkanfragen und Garbage Collection. Wo Browser Extensions oder einfache Konsolen Logs immer nur einen Ausschnitt zeigen, liefert ein Trace aus dem Performance Panel den kompletten Kontext: welcher Code lief wann, wie lange, und was er auf dem Main Thread blockiert hat.
Der Wert des Performance Panels zeigt sich besonders dann, wenn ein Ruckeln oder eine späte Reaktion auf Nutzereingaben gemeldet wird, aber die Ursache unklar ist. Statt zu raten, welche Funktion zu langsam ist, zeigt ein Recording im Performance Panel exakt den betroffenen Zeitraum, die aufgerufenen Funktionen und deren Selbstzeit. Diese Präzision unterscheidet systematisches Profiling von Trial and Error, und sie ist der Grund, warum das Performance Panel für jede ernsthafte Optimierung an Web Performance der erste Anlaufpunkt bleibt.
Ein weiterer Vorteil: das Performance Panel arbeitet direkt mit den echten Browser Interna, nicht mit Schätzwerten. Die Flame Chart Darstellung basiert auf demselben Trace Format, das auch Lighthouse und die Chrome User Experience Timeline nutzen. Wer das Performance Panel einmal richtig gelesen hat, versteht automatisch auch Feld Daten und synthetische Messungen besser, weil dieselben Konzepte, Main Thread, Task, Frame, überall wiederkehren.
2. Ein Recording starten: Optionen und Screenshots
Ein Recording im Performance Panel startet über den Kreis Button oder mit Strg plus E, während die zu untersuchende Interaktion ausgeführt wird. Wichtig ist, vor dem Start die Checkbox für Screenshots zu aktivieren. Ohne Screenshots zeigt das Performance Panel nur abstrakte Balken, mit Screenshots sieht man in der Filmstreifen Ansicht, was der Nutzer in jedem Moment tatsächlich gesehen hat, inklusive weißer Flächen während eines Long Task.
Für reproduzierbare Ergebnisse empfiehlt sich zusätzlich die Option Web Vitals im Overlay der Seite selbst, kombiniert mit einer klar abgegrenzten Interaktion im Recording, etwa einem einzelnen Klick auf einen Button statt einer langen Session mit vielen Aktionen. Ein kurzes, fokussiertes Recording im Performance Panel ist leichter zu analysieren als ein zehn Sekunden langer Trace mit hunderten überlappenden Aktivitäten. Für automatisierte Aufzeichnungen bietet sich das Programmatic Recording über die Chrome DevTools Protocol Methode Tracing.start an, die dieselben Daten liefert wie ein manuelles Recording im Performance Panel.
// Programmatic recording via Chrome DevTools Protocol (Puppeteer)
// Produces the same trace data the Performance Panel visualizes manually
import puppeteer from "puppeteer";
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.tracing.start({
path: "trace.json",
screenshots: true,
categories: ["devtools.timeline", "disabled-by-default-devtools.timeline"],
});
await page.goto("https://example.com/checkout");
await page.click("#place-order");
await page.waitForSelector("#confirmation");
await page.tracing.stop();
// trace.json can be loaded back into the Performance Panel via "Load profile"
await browser.close();
3. Den Flame Chart lesen: Stack, Breite und Farbe
Der Flame Chart ist die zentrale Visualisierung im Performance Panel. Jeder Balken repräsentiert einen Funktionsaufruf, die horizontale Position zeigt den Zeitpunkt, die Breite die Dauer, und die vertikale Position die Tiefe im Call Stack. Ein Balken, der einen anderen Balken direkt darunter aufruft, erscheint als Kind im Flame Chart, gestapelt exakt wie der reale Aufrufstapel zur Laufzeit. Diese Struktur macht den Flame Chart im Performance Panel zu einem präzisen Abbild dessen, was die JavaScript Engine tatsächlich getan hat.
Die Farbe der Balken im Flame Chart des Performance Panels folgt einer festen Kategorie Zuordnung: Gelb steht für Scripting, also JavaScript Ausführung, Lila für Rendering, also Style und Layout Berechnung, Grün für Painting, und Grau für System oder Idle Zeit. Wer im Performance Panel viel Gelb über einen langen Zeitraum sieht, hat ein JavaScript Problem, wer viel Lila sieht, eher ein Layout Problem, etwa durch erzwungene Reflows. Diese Farbcodierung im Flame Chart erlaubt eine schnelle erste Diagnose, bevor überhaupt in Details eines einzelnen Funktionsaufrufs eingestiegen wird.
Ein praktischer Kniff beim Lesen des Flame Charts: mit der Maus über einen schmalen Balken fahren zeigt ein Tooltip mit exaktem Funktionsnamen, Datei und Zeile. Per Klick auf einen Balken springt das Performance Panel automatisch in die Summary Ansicht darunter, die genau diesen Aufruf im Detail zeigt, inklusive Selbstzeit ohne Kindaufrufe. Wer regelmäßig mit dem Flame Chart arbeitet, entwickelt schnell ein Gefühl dafür, wo im Trace sich lohnende Ziele für Optimierung verstecken, ohne jede einzelne Zeile durchklicken zu müssen.
4. Call Tree und Bottom Up: zwei Blickwinkel auf dieselben Daten
Unterhalb des Flame Charts bietet das Performance Panel drei Tabs an: Bottom Up, Call Tree und Event Log. Der Call Tree zeigt die Aufrufhierarchie von oben nach unten, genau wie im Flame Chart, aber als aufklappbare Liste mit Prozentangaben. Das ist hilfreich, um zu verstehen, welcher Einstiegspunkt, etwa ein Event Handler oder ein Framework Lifecycle Hook, die meiste Zeit im Trace verursacht hat.
Die Bottom Up Ansicht im Performance Panel dreht die Perspektive um: sie gruppiert nach der Funktion selbst und zeigt, von wo aus diese Funktion überall aufgerufen wurde, unabhängig vom Kontext. Das ist der schnellste Weg, um die teuerste einzelne Funktion in einem Recording zu finden, etwa eine ineffiziente Sortierfunktion, die von mehreren Stellen im Code aufgerufen wird. Ohne Bottom Up müsste man denselben Funktionsnamen in jedem Ast des Call Trees einzeln suchen, mit Bottom Up steht die Summe aller Aufrufe direkt oben in der Liste.
Das Event Log listet chronologisch jedes einzelne Ereignis im Trace, inklusive Netzwerk Requests, Timer und Rendering Events. Für die meisten Performance Panel Analysen reicht die Kombination aus Flame Chart für den visuellen Überblick und Bottom Up für die konkrete Funktionsidentifikation, das Event Log wird meist nur bei sehr spezifischen Fragen zu einzelnen Netzwerk oder Timer Ereignissen konsultiert.
// Example function that shows up prominently in Bottom Up
// because it is called from three different UI paths
function sortLargeDataset(items) {
// Naive comparator recomputes derived values on every comparison
return items.sort((a, b) => {
const scoreA = computeRelevanceScore(a); // expensive, no memoization
const scoreB = computeRelevanceScore(b);
return scoreB - scoreA;
});
}
// Fix: precompute scores once before sorting (Schwartzian transform)
function sortLargeDatasetFast(items) {
const scored = items.map((item) => ({
item,
score: computeRelevanceScore(item),
}));
scored.sort((a, b) => b.score - a.score);
return scored.map((entry) => entry.item);
}
5. Main Thread Aktivität: Scripting, Rendering, Painting
Der Main Thread ist die zentrale Spur im Performance Panel und der Ort, an dem JavaScript, Style Berechnung, Layout und der Großteil des Renderings stattfinden. Alles, was auf dem Main Thread passiert, blockiert die Reaktion auf Nutzereingaben, denn ein einzelner Thread kann nicht gleichzeitig einen Klick verarbeiten und eine lange Schleife ausführen. Das Performance Panel macht diese Blockade sichtbar, indem die Main Thread Spur lückenlos jede Millisekunde Aktivität zeigt.
Ein häufiges Missverständnis: viele Entwickler denken, dass asynchroner Code, etwa mit async und await, automatisch den Main Thread entlastet. Das stimmt nur für die Wartezeit auf externe Ressourcen wie Netzwerk oder Timer, nicht für die eigentliche Ausführung des Codes danach. Ein await auf einen Fetch Request pausiert den Main Thread nicht während des Wartens, aber sobald die Antwort da ist, läuft der Callback synchron und blockiert den Main Thread genauso wie jeder andere synchrone Code. Das Performance Panel zeigt genau diesen Übergang im Flame Chart als neuen Scripting Block nach der Netzwerk Spur.
Um Main Thread Blockaden gezielt zu reduzieren, hilft die Aufteilung großer synchroner Aufgaben in kleinere Chunks mit Zwischenschritten, etwa über requestIdleCallback oder die neuere Scheduler API mit scheduler.yield. Das Performance Panel zeigt den Erfolg solcher Maßnahmen unmittelbar: statt eines einzelnen breiten Balkens erscheinen mehrere kürzere Balken mit kleinen Lücken dazwischen, in denen der Main Thread wieder für Eingaben verfügbar ist.
6. Long Tasks im Trace erkennen und einordnen
Ein Long Task ist per Definition jede Aufgabe auf dem Main Thread, die länger als fünfzig Millisekunden dauert. Das Performance Panel markiert solche Long Tasks mit einem roten Dreieck in der oberen rechten Ecke des jeweiligen Balkens in der Main Thread Spur. Diese visuelle Markierung ist der schnellste Weg, um in einem langen Recording sofort die problematischen Stellen zu finden, ohne jeden Balken einzeln prüfen zu müssen.
Die fünfzig Millisekunden Schwelle für Long Tasks im Performance Panel ist kein Zufallswert, sondern orientiert sich an der Wahrnehmungsgrenze für Reaktionsfähigkeit. Bleibt eine Aufgabe unter fünfzig Millisekunden, bleibt genug Puffer für den Browser, um eine Eingabe noch innerhalb einer für Menschen akzeptablen Zeitspanne zu verarbeiten. Überschreitet eine Aufgabe diese Grenze deutlich, etwa auf zweihundert oder dreihundert Millisekunden, wird die Verzögerung für Nutzer spürbar, unabhängig davon, wie schnell das Gerät sonst ist.
Im Performance Panel lässt sich ein Long Task per Klick aufklappen und im Call Tree darunter genau analysieren, welcher Teil der Aufgabe die meiste Zeit beansprucht hat. Häufige Ursachen sind große JSON Parsing Operationen, ineffiziente DOM Manipulation in Schleifen, oder Third Party Skripte, die synchron große Datenmengen verarbeiten. Das Performance Panel zeigt bei Third Party Code oft eine eigene Farbmarkierung oder zumindest einen erkennbaren Domain Namen in der Funktionsbeschreibung, was die Zuordnung von Verantwortlichkeit erheblich erleichtert.
// Breaking up a long task so it no longer shows the red triangle
// in the Performance Panel's Main Thread track
async function processLargeArray(items) {
const chunkSize = 200;
const results = [];
for (let i = 0; i < items.length; i += chunkSize) {
const chunk = items.slice(i, i + chunkSize);
results.push(...chunk.map(transformItem));
// Yield back to the main thread between chunks
if ("scheduler" in window && "yield" in window.scheduler) {
await window.scheduler.yield();
} else {
await new Promise((resolve) => setTimeout(resolve, 0));
}
}
return results;
}
7. Web Vitals Marker: LCP, CLS und INP im Recording
Das Performance Panel zeigt direkt in der Timeline eigene Marker für die wichtigsten Web Vitals: ein Symbol für Largest Contentful Paint, kleine rote Bereiche für Layout Shifts, die zusammen den Cumulative Layout Shift ergeben, und seit neueren Chrome Versionen auch Marker für Interaction to Next Paint. Diese Marker erscheinen als eigene Zeile oberhalb der Main Thread Spur und lassen sich anklicken, um Details zum jeweiligen Element und dessen Timing zu sehen.
Für die Largest Contentful Paint Analyse zeigt das Performance Panel per Klick auf den LCP Marker exakt, welches DOM Element als größtes sichtbares Element erkannt wurde, und liefert eine Aufschlüsselung der Zeit in Time to First Byte, Ressourcen Ladezeit und Render Delay. Diese Aufschlüsselung im Performance Panel ist deutlich präziser als ein reiner Lighthouse Score, weil sie auf den tatsächlichen Timing Daten des konkreten Recordings basiert, nicht auf einer simulierten Umgebung.
Layout Shifts werden im Performance Panel als kleine rote Balken direkt in der Experience Spur angezeigt. Ein Klick öffnet die Details mit den betroffenen Elementen und deren Verschiebung in Pixel. Diese Darstellung macht es einfach, Layout Shifts konkreten Ursachen zuzuordnen, etwa einem Bild ohne definierte Breite und Höhe, oder einem spät eingefügten Werbebanner, der den restlichen Inhalt nach unten schiebt.
8. CPU Throttling, Netzwerk-Simulation und Custom Marks
Ein Recording im Performance Panel auf einem leistungsstarken Entwickler Laptop zeigt selten die reale Nutzererfahrung. Deshalb bietet das Performance Panel eine CPU Throttling Option, die die Prozessorleistung künstlich um den Faktor vier oder sechs reduziert, um ein durchschnittliches Mobilgerät zu simulieren. Kombiniert mit Netzwerk Throttling für langsame 3G oder 4G Verbindungen liefert das Performance Panel damit ein realistischeres Bild der tatsächlichen Nutzererfahrung als ein ungedrosseltes Recording.
Für eigene, fachlich relevante Zeitmessungen unterstützt das Performance Panel die User Timing API. Mit performance.mark und performance.measure lassen sich benutzerdefinierte Marker setzen, die im Trace als eigene Spur unterhalb der Main Thread Aktivität erscheinen. Das ist besonders wertvoll, um geschäftskritische Abläufe zu markieren, etwa den Beginn und das Ende eines Checkout Prozesses, statt sich nur auf generische Browser Metriken zu verlassen.
// Custom marks show up as a dedicated "Timings" track
// in the Performance Panel, next to Main Thread activity
performance.mark("checkout-start");
await validateCart();
await calculateShipping();
await applyDiscounts();
performance.mark("checkout-end");
performance.measure("checkout-duration", "checkout-start", "checkout-end");
const [entry] = performance.getEntriesByName("checkout-duration");
console.log(`Checkout took ${entry.duration.toFixed(1)}ms`);
9. Performance Panel im Vergleich zu anderen Tools
Das Performance Panel ist nicht das einzige Werkzeug für Performance Analyse, aber es hat einen klaren Platz im Werkzeugkasten. Andere Tools wie Lighthouse oder WebPageTest liefern synthetische Scores und Empfehlungen, das Performance Panel liefert die granularen Rohdaten dahinter. Die folgende Tabelle ordnet ein, wann welches Werkzeug den größten Nutzen bringt.
| Werkzeug | Datenebene | Stärke | Grenze |
|---|---|---|---|
| Performance Panel | Vollständiger Trace, Funktionsebene | Exakte Ursachenanalyse per Flame Chart | Manuell, ein Recording pro Analyse |
| Lighthouse | Synthetischer Score, Empfehlungen | Schnelle Einordnung, CI Integration | Keine Funktions Details im Score |
| WebPageTest | Reale Geräte, Wasserfall | Standort und Geräte Varianz | Kein interaktiver Flame Chart |
| Chrome UX Report | Feld Daten, echte Nutzer | Reale Verteilung über alle Nutzer | Keine Ursachenanalyse einzelner Fälle |
In der Praxis ergänzen sich diese Werkzeuge. Der Chrome UX Report zeigt, dass ein Problem existiert, Lighthouse gibt eine erste Richtung vor, und das Performance Panel liefert schließlich die Funktion und Zeile, die konkret behoben werden muss. Wer nur mit Lighthouse Scores arbeitet, ohne je ein Recording im Performance Panel geöffnet zu haben, optimiert oft an Symptomen statt an der eigentlichen Ursache.
Mironsoft
JavaScript Performance Analyse und Frontend Profiling
Rucklern und langsamen Interaktionen auf den Grund gehen?
Wir analysieren eure Anwendung mit dem Performance Panel, finden die exakten Long Tasks und liefern konkrete, priorisierte Maßnahmen statt genereller Empfehlungen.
Trace Analyse
Recording erstellen, Flame Chart und Bottom Up systematisch auswerten
Long Task Fixes
Aufgaben aufteilen, Scheduler API einsetzen, Main Thread entlasten
Web Vitals Monitoring
Custom Marks, LCP und INP Tracking dauerhaft im Blick behalten
10. Zusammenfassung
Das Performance Panel in Chrome DevTools bleibt das präziseste Werkzeug, um die tatsächliche Ursache von Rucklern und langsamen Interaktionen zu finden. Der Flame Chart zeigt den kompletten Aufrufstapel über die Zeit, Bottom Up identifiziert die teuerste Funktion unabhängig vom Aufrufkontext, und die Main Thread Spur macht Long Tasks mit dem roten Dreieck sofort sichtbar. Web Vitals Marker für LCP, CLS und INP verbinden die technische Ebene direkt mit den Metriken, die Nutzererfahrung tatsächlich messen.
Wer regelmäßig mit dem Performance Panel arbeitet, entwickelt ein Gespür dafür, wo Optimierung den größten Effekt hat, ohne jede Zeile Code manuell durchzugehen. Kombiniert mit CPU Throttling für realistische Bedingungen und Custom Marks für geschäftskritische Abläufe wird aus einem einzelnen Recording eine belastbare Grundlage für priorisierte Performance Arbeit, statt vager Vermutungen über den langsamsten Teil der Anwendung.
Performance Panel im Detail — Das Wichtigste auf einen Blick
Flame Chart
Breite zeigt Dauer, Tiefe zeigt Aufrufstapel, Farbe zeigt Kategorie: Gelb Scripting, Lila Rendering, Grün Painting.
Bottom Up vs. Call Tree
Bottom Up findet die teuerste Funktion über alle Aufrufe hinweg, Call Tree zeigt die Hierarchie eines Einstiegspunkts.
Long Tasks
Rotes Dreieck ab fünfzig Millisekunden Main Thread Blockade, direkt im Trace anklickbar zur Detailanalyse.
Web Vitals im Trace
LCP, CLS und INP Marker direkt in der Timeline, mit Aufschlüsselung der genauen Ursache pro Element.