Start · Sprachen · JavaScript · Referenz · console.profileEnd()

console.profileEnd()

Methode

Stoppt die Aufzeichnung eines CPU-Profils, das zuvor mit <code>console.profile()</code> gestartet wurde, und stellt es in den Entwicklerwerkzeugen bereit.

seit JavaScript Nicht standardisiert; unterstützt in Chrome, Edge, Kategorie: webapi

Signatur

console.profileEnd(profileName)

Beschreibung

console.profileEnd() beendet eine laufende Profiler-Aufzeichnung, die mit console.profile() gestartet wurde. Das fertige Profil erscheint danach im Performance- bzw. Profiler-Panel der Entwicklerwerkzeuge (Chrome: JavaScript Profiler/Performance, Firefox: Performance). Dort lassen sich Aufrufbaum, Selbstzeit und Gesamtzeit einzelner Funktionen auswerten.

Das Methodenpaar ist nützlich, wenn man genau einen Codeabschnitt messen will, statt die Aufzeichnung per Hand im Panel zu starten und zu stoppen. Das bietet sich etwa für eine teure Render-Funktion, einen Sortieralgorithmus oder einen einzelnen Event-Handler an. Der Code bestimmt selbst, wann die Messung beginnt und endet, und das macht Messungen wiederholbar.

Gibt man einen profileName an, wird genau das Profil mit diesem Namen beendet. Ohne Argument stoppt der Aufruf das zuletzt gestartete Profil. Profile können verschachtelt sein. Deshalb sollte man bei mehreren gleichzeitigen Aufzeichnungen immer Namen verwenden.

Parameter

Name Typ Default Beschreibung
$profileName string Name des zu beendenden Profils, wie er bei console.profile() angegeben wurde. Fehlt er, wird das zuletzt gestartete Profil beendet.

Rückgabewert

Typ
void
Beschreibung
Gibt undefined zurück. Das Ergebnis erscheint nur in den Entwicklerwerkzeugen, nicht als Rückgabewert.

Beispiele

Teure Funktion gezielt profilen

const fibonacci = (n) => (n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2));

console.profile('fibonacci');
const result = fibonacci(30);
console.profileEnd('fibonacci');

console.log('Ergebnis:', result);
Ergebnis: 832040 // Im Profiler-Panel erscheint das Profil „fibonacci“

Verschachtelte Profile mit Namen beenden

const sortData = (arr) => [...arr].sort((a, b) => a - b);
const data = Array.from({ length: 200_000 }, () => Math.random());

console.profile('gesamt');

console.profile('sortieren');
const sorted = sortData(data);
console.profileEnd('sortieren');

const sum = sorted.reduce((acc, v) => acc + v, 0);
console.profileEnd('gesamt');

console.log(sorted.length, sum > 0);
200000 true // Zwei Profile: „sortieren“ und „gesamt“

Asynchronen Ablauf sicher mit try/finally messen

const loadUsers = async () => {
  console.profile('loadUsers');
  try {
    const res = await fetch('https://jsonplaceholder.typicode.com/users');
    const users = await res.json();
    return users.map(({ name }) => name.toUpperCase());
  } finally {
    // Profil wird auch bei Fehlern sicher beendet
    console.profileEnd('loadUsers');
  }
};

loadUsers().then((names) => console.log(names.length));
10

// Wichtig · Fallstricke

  • Nicht standardisiert: console.profile() und console.profileEnd() stehen nicht im WHATWG-Console-Standard. Chromium-Browser, Firefox und Safari unterstützen sie, das Verhalten und die Darstellung unterscheiden sich aber.
  • Die Methoden wirken in der Regel nur bei geöffneten Entwicklerwerkzeugen. Ohne DevTools passiert meist nichts. In Node.js greifen sie nur, wenn ein Inspector verbunden ist (node --inspect).
  • Ohne Namen beendet der Aufruf das zuletzt gestartete Profil. Bei verschachtelten oder gleichzeitig laufenden Messungen führt das leicht zu vertauschten Profilen. Deshalb besser immer Namen angeben.
  • Wer vergisst, profileEnd() aufzurufen (etwa weil vorher eine Ausnahme geworfen wird), lässt die Aufzeichnung weiterlaufen. try/finally verhindert das.
  • Profiling kostet selbst Rechenzeit. Die gemessenen Zeiten sind daher nur Richtwerte. Die Aufrufe gehören nicht in Produktionscode.
  • Für einfache Zeitmessungen ohne Aufrufbaum eignen sich console.time()/console.timeEnd() oder performance.mark()/performance.measure() besser, da sie breiter unterstützt werden.