The performance.now() method returns a DOMHighResTimeStamp, measured in milliseconds, accurate to five thousandths of a millisecond (5 microseconds).
The returned value represents the time elapsed since the time origin (the PerformanceTiming.navigationStart property). In a web worker, the time origin is the time that its execution context (e.g. thread or process) is created. In a window, it is the time that the user navigated (or confirmed navigation, if confirmation was needed) to the current document. Bear in mind the following points:
- In dedicated workers created from a
Windowcontext, the value in the worker will be lower thanperformance.now()in the window who spawned that worker. It used to be the same ast0of the main context, but this was changed. - In shared or service workers, the value in the worker might be higher than that of the main context because that window can be created after those workers.
Syntax
t = performance.now();
Example
var t0 = performance.now();
doSomething();
var t1 = performance.now();
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds.");
Unlike other timing data available to JavaScript (for example Date.now), the timestamps returned by Performance.now() are not limited to one-millisecond resolution. Instead, they represent times as floating-point numbers with up to microsecond precision.
Also unlike Date.now(), the values returned by Performance.now() always increase at a constant rate, independent of the system clock (which might be adjusted manually or skewed by software like NTP). Otherwise, performance.timing.navigationStart + performance.now() will be approximately equal to Date.now().
Specifications
| Specification | Status | Comment |
|---|---|---|
| High Resolution Time Level 2 The definition of 'performance.now()' in that specification. |
Candidate Recommendation | Stricter definitions of interfaces and types. |
| High Resolution Time The definition of 'performance.now()' in that specification. |
Recommendation | Initial definition |
Browser compatibility
| Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|---|
| Basic support | 20.0 webkit 24.0 [1] |
(Yes) | 15.0 (15.0) | 10.0 | 15.0 | 8.0 |
| on Web workers | 33 | ? | 34.0 (34.0) | ? | ? | ? |
now() in a dedicated worker is now separate from the main context's now(). |
? | ? | 45.0 (45.0) | ? | ? | ? |
| Feature | Android | Android Webview | Edge | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
|---|---|---|---|---|---|---|---|---|
| Basic support | 4.0 | 25.0 | (Yes) | 15.0 (15.0) | 10.0 | No support | 9 | 25.0 |
| on Web workers | ? | (Yes) | ? | 34.0 (34.0) | ? | ? | ? | (Yes) |
now() in a dedicated worker is now separate from the main context's now(). |
? | ? | ? | 45.0 (45.0) | ? | ? | ? | ? |
[1] Windows versions of Chrome 20 through 33 return performance.now() only to millisecond precision.
See also
- When milliseconds are not enough: performance.now() from HTML5 Rocks.