PerformanceElementTiming
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
The PerformanceElementTiming interface contains render timing information for image and text node elements the developer annotated with an elementtiming attribute for observation.
Description
The aim of the Element Timing API is to give web developers or analytics tools the ability to measure rendering timestamps of critical elements on a page.
The API supports timing information on the following elements:
<img>elements,<image>elements inside an<svg>,- poster images of
<video>elements, - elements which have a contentful
background-imageproperty with a URL value for a resource that is actually available, and - groups of text nodes, such as a
<p>.
The author flags an element for observation by adding the elementtiming attribute on the element.
PerformanceElementTiming inherits from PerformanceEntry.
Instance properties
This interface directly defines the following properties:
PerformanceElementTiming.elementRead only Experimental-
An
Elementrepresenting the element we are returning information about. PerformanceElementTiming.idRead only Experimental-
A string which is the
idof the element. PerformanceElementTiming.identifierRead only Experimental-
A string which is the value of the
elementtimingattribute on the element. PerformanceElementTiming.intersectionRectRead only Experimental-
A
DOMRectReadOnlywhich is the rectangle of the element within the viewport. PerformanceElementTiming.loadTimeRead only Experimental-
A
DOMHighResTimeStampwith the loadTime of the element. PerformanceElementTiming.naturalHeightRead only Experimental-
An unsigned 32-bit integer (unsigned long) which is the intrinsic height of the image if this is applied to an image, 0 for text.
PerformanceElementTiming.naturalWidthRead only Experimental-
An unsigned 32-bit integer (unsigned long) which is the intrinsic width of the image if this is applied to an image, 0 for text.
PerformanceElementTiming.paintTime-
Returns the
timestampwhen the rendering phase ended and the paint phase started. PerformanceElementTiming.presentationTime-
Returns the
timestampwhen the element was actually drawn on the screen. PerformanceElementTiming.renderTimeRead only Experimental-
A
DOMHighResTimeStampwith the renderTime of the element. PerformanceElementTiming.urlRead only Experimental-
A string which is the initial URL of the resources request for images, 0 for text.
It also extends the following PerformanceEntry properties, qualifying and constraining them as described:
PerformanceEntry.durationRead only Experimental-
Always returns
0asdurationdoes not apply to this interface. PerformanceEntry.entryTypeRead only Experimental-
Always returns
"element". PerformanceEntry.nameRead only Experimental-
Returns
"image-paint"for images and"text-paint"for text. PerformanceEntry.startTimeRead only Experimental-
Returns the value of this entry's
renderTimeif it is not0, otherwise the value of this entry'sloadTime.
Instance methods
PerformanceElementTiming.toJSON()Experimental-
Returns a JSON representation of the
PerformanceElementTimingobject.
Examples
>Observing render time of specific elements
In this example two elements are being observed by adding the elementtiming attribute. A PerformanceObserver is registered to get all performance entries of type "element" and the buffered flag is used to access data from before observer creation.
<img src="image.jpg" elementtiming="big-image" />
<p elementtiming="text" id="text-id">text here</p>
const observer = new PerformanceObserver((list) => {
list.getEntries().forEach((entry) => {
console.log(entry);
});
});
observer.observe({ type: "element", buffered: true });
Two entries will be output to the console. The first containing details of the image, the second with details of the text node.
Observing separate paint and presentation timings
The paintTime and presentationTime properties enable you to retrieve specific timings for the paint phase starting and the element being drawn on the screen. The paintTime is broadly interoperable, whereas the presentationTime is implementation-dependent.
This example uses a PerformanceObserver to observe all performance entries of type "element" (remember that, to be observed, elements need to have elementtiming attributes set on them). We check for paintTime and presentationTime support and retrieve those values if they are available. In non-supporting browsers, the code retrieves the renderTime or loadTime, depending on what is supported.
const observer = new PerformanceObserver((list) => {
const entries = list.getEntries();
entries.forEach((entry) => {
if (entry.presentationTime) {
console.log(
"Element paintTime:",
entry.paintTime,
"Element presentationTime:",
entry.presentationTime,
);
} else if (entry.paintTime) {
console.log("Element paintTime:", entry.paintTime);
} else if (entry.renderTime) {
console.log("Element renderTime:", entry.renderTime);
} else {
console.log("Element loadTime", entry.loadTime);
}
});
});
observer.observe({ type: "element", buffered: true });
Specifications
| Specification |
|---|
| Element Timing API> # sec-performance-element-timing> |
Browser compatibility
See also
elementtimingHTML attribute