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

console.profile()

Methode

Startet die Aufzeichnung eines CPU-/Performance-Profils in den Entwicklerwerkzeugen, das mit <code>console.profileEnd()</code> beendet wird.

seit JavaScript Nicht standardisiert – Chrome, Edge, Firefox, Node Kategorie: webapi

Signatur

console.profile(profileName)

Beschreibung

Die statische Methode console.profile() startet in den Entwicklerwerkzeugen des Browsers (z. B. im Performance-Panel von Firefox oder im Performance- bzw. JavaScript-Profiler-Panel von Chrome) die Aufzeichnung eines Performance-Profils. Mit console.profileEnd() beenden Sie die Aufzeichnung wieder. Danach können Sie das Ergebnis mit Aufrufbaum, Flame-Chart und Laufzeit pro Funktion auswerten.

Der große Vorteil gegenüber dem manuellen Klick auf „Aufnahme starten“: Sie können genau den Code-Abschnitt profilieren, der Sie interessiert, zum Beispiel eine rechenintensive Schleife, das Rendern einer Liste oder einen bestimmten Ereignis-Handler. So bleibt das Profil klein und übersichtlich.

Mit dem optionalen Parameter profileName geben Sie dem Profil einen Namen. Mehrere benannte Profile dürfen sich überlappen, und ein console.profileEnd(name) mit demselben Namen beendet genau dieses Profil. Die Methode ist nur zur Entwicklung und Fehlersuche gedacht und gehört nicht in Produktionscode.

Parameter

Name Typ Default Beschreibung
$profileName string Optionaler Name des Profils. Er wird in der Profilübersicht der DevTools angezeigt und ordnet einen späteren Aufruf von console.profileEnd(profileName) genau diesem Profil zu.

Rückgabewert

Typ
void
Beschreibung
Gibt undefined zurück. Das Profil erscheint als Nebeneffekt in den Entwicklerwerkzeugen.

Beispiele

Rechenintensive Funktion profilieren

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

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

console.log('Ergebnis:', result);
Ergebnis: 832040 // In den DevTools erscheint das Profil „Fibonacci“

Rendern einer großen Liste messen

const renderList = (items) => {
  const ul = document.createElement('ul');
  for (const item of items) {
    const li = document.createElement('li');
    li.textContent = item;
    ul.append(li);
  }
  document.body.append(ul);
};

const items = Array.from({ length: 10_000 }, (_, i) => `Eintrag ${i + 1}`);

console.profile('Liste rendern');
renderList(items);
console.profileEnd('Liste rendern');

Asynchronen Ablauf profilieren

const loadAndProcess = async () => {
  console.profile('Laden + Verarbeiten');
  try {
    const res = await fetch('https://jsonplaceholder.typicode.com/posts');
    const posts = await res.json();
    const titles = posts.map((p) => p.title.toUpperCase()).sort();
    console.log(`${titles.length} Titel verarbeitet`);
  } finally {
    // Profil auch im Fehlerfall sauber beenden
    console.profileEnd('Laden + Verarbeiten');
  }
};

loadAndProcess();
100 Titel verarbeitet

Nur in der Entwicklung profilieren

const DEBUG = location.hostname === 'localhost';

const withProfile = (name, fn) => {
  if (!DEBUG || typeof console.profile !== 'function') return fn();
  console.profile(name);
  try {
    return fn();
  } finally {
    console.profileEnd(name);
  }
};

const sum = withProfile('Summe', () =>
  Array.from({ length: 1e6 }, (_, i) => i).reduce((a, b) => a + b, 0)
);
console.log(sum);
499999500000

// Wichtig · Fallstricke

  • Nicht standardisiert: console.profile() gehört nicht zum WHATWG-Console-Standard. Chrome, Edge und Firefox unterstützen die Methode. In Safari gibt es sie, sie verhält sich aber teilweise anders. In Node.js wirkt sie nur, wenn ein Inspector verbunden ist (z. B. node --inspect mit Chrome DevTools), sonst passiert nichts.
  • DevTools müssen meist geöffnet sein. Bei geschlossenen Entwicklerwerkzeugen wird in vielen Browsern kein Profil aufgezeichnet.
  • Ein Aufruf ohne passendes console.profileEnd() lässt die Aufzeichnung weiterlaufen. Das kostet Speicher und verfälscht Messungen. Nutzen Sie daher try…finally, besonders bei asynchronem Code.
  • Das Profilieren selbst erzeugt Overhead. Absolute Zeiten sind deshalb nur ungefähr, zum Vergleich von Varianten taugen sie aber gut. Für einfache Zeitmessungen reichen console.time() oder performance.now().
  • Aus Produktionscode entfernen oder hinter eine Debug-Abfrage legen. Build-Tools wie Terser (drop_console) können solche Aufrufe automatisch entfernen.