Signatur
Beschreibung
Die nur lesbare Eigenschaft loadTime der Schnittstelle PerformanceElementTiming gibt an, wann die Ressource eines mit dem Attribut elementtiming markierten Elements fertig geladen war. Der Wert ist ein DOMHighResTimeStamp in Millisekunden und bezieht sich auf performance.timeOrigin.
Wie aussagekräftig der Wert ist, hängt vom Element ab:
- Bilder (
<img>,<image>in SVG, CSS-Hintergrundbilder, Poster-Bilder von<video>): Zeitpunkt, an dem die Bildressource vollständig geladen war. - Textknoten: immer
0, weil Text keine eigene Ressource nachlädt.
Im Zusammenspiel mit renderTime (wann das Element tatsächlich gezeichnet wurde) lässt sich erkennen, ob ein Hero-Bild langsam wegen des Netzwerks erscheint (hoher loadTime) oder weil das Rendern blockiert ist (große Differenz zwischen loadTime und renderTime). Die Einträge bekommt man über einen PerformanceObserver mit dem Eintragstyp "element".
Rückgabewert
performance.timeOrigin, an dem die Bildressource geladen war. Für Text-Elemente immer 0.Beispiele
Ladezeit eines Hero-Bildes erfassen
// HTML: <img src="hero.jpg" elementtiming="hero-bild" alt="">
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
console.log(`${entry.identifier}: geladen nach ${entry.loadTime.toFixed(1)} ms`);
}
});
observer.observe({ type: "element", buffered: true });
Bild und Text unterscheiden
// HTML:
// <h1 elementtiming="titel">Willkommen</h1>
// <img src="banner.webp" elementtiming="banner" alt="">
new PerformanceObserver((list) => {
list.getEntries().forEach(({ identifier, name, loadTime }) => {
// name ist "text-paint" oder "image-paint"
const art = loadTime === 0 ? "Text (keine Ressource)" : "Bild";
console.log(identifier, name, art, loadTime);
});
}).observe({ type: "element", buffered: true });
Verzögerung zwischen Laden und Rendern messen
new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
if (entry.loadTime === 0) continue; // Text überspringen
// renderTime kann bei Cross-Origin-Bildern ohne Timing-Allow-Origin 0 sein
const render = entry.renderTime || entry.startTime;
const verzoegerung = render - entry.loadTime;
console.log(`${entry.identifier}: Render-Verzögerung ${verzoegerung.toFixed(1)} ms`);
}
}).observe({ type: "element", buffered: true });
// Wichtig · Fallstricke
- Browser-Unterstützung: Element Timing gibt es nur in Chromium-Browsern. Firefox und Safari unterstützen die API nicht. Prüfe das vorher mit
PerformanceObserver.supportedEntryTypes.includes("element"). - Für Text-Elemente ist
loadTimeimmer0. Nimm dortrenderTime. - Nur Elemente mit dem Attribut
elementtimingwerden gemeldet. Ausnahme: Chromium meldet einige große Bilder und Texte auch ohne das Attribut, weil sie für Largest Contentful Paint (LCP) relevant sind. - Bei Cross-Origin-Bildern ohne den Header
Timing-Allow-OriginbleibtloadTimeverfügbar,renderTimeist aber0. Den Header zu setzen verbessert die Genauigkeit. - Ohne
buffered: truefehlen Einträge, die entstanden sind, bevor der Observer registriert wurde. - Die Eigenschaft ist nur lesbar. Zuweisungen werden stillschweigend ignoriert.