Signatur
Beschreibung
console.timeEnd() beendet einen Timer, der zuvor mit console.time() unter derselben Bezeichnung (label) gestartet wurde. Dabei wird die seit dem Start verstrichene Zeit in Millisekunden in der Konsole ausgegeben, z. B. datenLaden: 123.456 ms. Danach wird der Timer entfernt, und dieselbe Bezeichnung kann erneut verwendet werden.
Die Methode eignet sich für schnelle, unkomplizierte Laufzeitmessungen während der Entwicklung: Wie lange dauert ein Netzwerkaufruf, eine Schleife oder das Rendern einer Liste? Mehrere Timer mit unterschiedlichen Bezeichnungen können gleichzeitig laufen, sodass sich auch verschachtelte Abläufe messen lassen.
Wer Zwischenstände braucht, ohne den Timer zu beenden, nimmt console.timeLog(). Für präzise, programmatisch auswertbare Messungen eignen sich performance.now() oder performance.mark()/performance.measure() besser, denn console.timeEnd() schreibt nur in die Konsole und gibt keinen Wert zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $label | string | "default" | Bezeichnung des zu stoppenden Timers. Muss exakt mit der Bezeichnung übereinstimmen, die beim Aufruf von console.time() verwendet wurde. Ohne Angabe wird der Timer "default" beendet. |
Rückgabewert
undefined zurück. Die gemessene Dauer erscheint nur als Konsolenausgabe.Beispiele
Einfache Laufzeitmessung einer Schleife
console.time('schleife');
let summe = 0;
for (let i = 0; i < 1_000_000; i++) {
summe += i;
}
console.timeEnd('schleife');
Dauer eines Fetch-Aufrufs messen
const ladeBenutzer = async () => {
console.time('fetchBenutzer');
try {
const response = await fetch('https://jsonplaceholder.typicode.com/users');
const benutzer = await response.json();
console.log(`${benutzer.length} Benutzer geladen`);
} finally {
// finally sorgt dafür, dass der Timer auch bei Fehlern beendet wird
console.timeEnd('fetchBenutzer');
}
};
ladeBenutzer();
Verschachtelte Timer mit Zwischenstand
const verarbeite = () => {
console.time('gesamt');
console.time('sortieren');
const zahlen = Array.from({ length: 100_000 }, () => Math.random());
zahlen.sort((a, b) => a - b);
console.timeEnd('sortieren');
console.timeLog('gesamt', 'nach dem Sortieren');
console.time('filtern');
const gross = zahlen.filter((z) => z > 0.5);
console.timeEnd('filtern');
console.timeEnd('gesamt');
return gross.length;
};
verarbeite();
Standard-Timer ohne Bezeichnung
console.time();
setTimeout(() => {
console.timeEnd(); // beendet den Timer "default"
}, 500);
// Wichtig · Fallstricke
- Bezeichnung muss exakt passen: Groß- und Kleinschreibung zählen. Gibt es keinen Timer mit dieser Bezeichnung, erscheint nur eine Warnung wie
Timer "xyz" does not existund es wird keine Zeit ausgegeben. - Kein Rückgabewert: Die gemessene Zeit lässt sich nicht im Code weiterverarbeiten. Dafür
performance.now()oderperformance.measure()verwenden. - Genauigkeit: Aus Sicherheitsgründen (Schutz vor Timing-Angriffen wie Spectre) runden Browser die Zeitauflösung teilweise ab. Einzelmessungen schwanken außerdem durch JIT-Kompilierung und Garbage Collection – für aussagekräftige Benchmarks mehrfach messen.
- Asynchroner Code: Den Timer bei
async-Abläufen am besten in einemfinally-Block beenden, sonst bleibt er bei Fehlern offen. - Das Ausgabeformat ist nicht standardisiert und unterscheidet sich zwischen Browsern und Node.js (z. B.
msvs.sbei langen Dauern). In Produktivcode sollten Aufrufe entfernt werden. - Wird von allen modernen Browsern, in Web Workern und in Node.js unterstützt.