Signatur
Beschreibung
Die Eigenschaft startTime liefert den Zeitpunkt, an dem ein Performance-Eintrag beginnt. Der Wert ist ein DOMHighResTimeStamp, also eine Gleitkommazahl in Millisekunden relativ zu performance.timeOrigin (in der Regel der Beginn der Navigation). Zusammen mit duration lässt sich so exakt berechnen, wann ein Vorgang begann und endete.
Was „Start“ genau heißt, hängt vom entryType ab:
mark: Zeitpunkt, an demperformance.mark()aufgerufen wurde (oder der perstartTime-Option übergebene Wert).measure: Zeitpunkt der Start-Markierung bzw. des übergebenen Startwerts.resource: Wert vonfetchStart– bei WeiterleitungenredirectStart, falls verfügbar.navigation: immer0.paint: Zeitpunkt des Paints (z. B.first-contentful-paint).longtask: Beginn der langen Aufgabe.event: Zeitstempel des Ereignisses (event.timeStamp).largest-contentful-paint:renderTime, falls vorhanden, sonstloadTime.
Typische Einsatzgebiete sind Real-User-Monitoring, das Aufbereiten von Web-Vitals, das Erstellen von Zeitleisten (Wasserfall-Diagramme) und das Sortieren oder Filtern von Einträgen nach ihrem Auftreten.
Rückgabewert
performance.timeOrigin; kann Nachkommastellen enthalten. Bei navigation-Einträgen stets 0.Beispiele
Start einer eigenen Messung auslesen
performance.mark('laden-start');
// simulierte Arbeit
for (let i = 0; i < 1e6; i++) {}
performance.mark('laden-ende');
const messung = performance.measure('laden', 'laden-start', 'laden-ende');
console.log(`Start: ${messung.startTime.toFixed(2)} ms`);
console.log(`Ende: ${(messung.startTime + messung.duration).toFixed(2)} ms`);
Langsame Ressourcen mit Startzeit protokollieren
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
if (entry.duration > 200) {
console.log(
`${entry.name} startete bei ${Math.round(entry.startTime)} ms, dauerte ${Math.round(entry.duration)} ms`
);
}
}
});
observer.observe({ type: 'resource', buffered: true });
First Contentful Paint ermitteln
new PerformanceObserver((list) => {
const fcp = list.getEntriesByName('first-contentful-paint')[0];
if (fcp) {
console.log(`FCP nach ${Math.round(fcp.startTime)} ms`);
}
}).observe({ type: 'paint', buffered: true });
Relative Zeit in absolute Uhrzeit umrechnen
const [nav] = performance.getEntriesByType('resource');
if (nav) {
const absolut = performance.timeOrigin + nav.startTime;
console.log(new Date(absolut).toISOString());
}
// Wichtig · Fallstricke
- Relativer Wert:
startTimeist kein Unix-Zeitstempel. Für eine absolute Zeitperformance.timeOrigin + entry.startTimeverwenden – nicht mitDate.now()mischen. - Reduzierte Genauigkeit: Zum Schutz vor Timing-Angriffen (Spectre) runden Browser den Wert ab bzw. versehen ihn mit Rauschen (z. B. 100 µs, in Firefox je nach Einstellung bis 1 ms). Volle Auflösung gibt es meist nur in cross-origin-isolierten Kontexten (COOP/COEP).
- Cross-Origin-Ressourcen:
startTimeunddurationsind auch ohneTiming-Allow-Origin-Header verfügbar, detaillierte Phasen (z. B.domainLookupStart) jedoch nicht. - Worker: In Web Workern bezieht sich der Wert auf den
timeOrigindes Workers, nicht auf den der Seite – Werte aus unterschiedlichen Kontexten nicht direkt vergleichen. - Bei
largest-contentful-paintkannrenderTimefür Cross-Origin-Bilder ohneTiming-Allow-Origin0sein; dann fälltstartTimeaufloadTimezurück. - Die Eigenschaft ist schreibgeschützt; Zuweisungen werden ignoriert (bzw. werfen im Strict Mode keinen Fehler, bleiben aber wirkungslos).