Browser performance guru, Nat Duca, has introduced high resolution timing to JavaScript. Ready to try in Chrome 20, the experimental window.performance.webkitNow()
interface provides microsecond resolution and guarantees not to flow backward (monotonically nondecreasing).
Microseconds matter
Until now
, creating a new Date
object and querying its time was the only way to measure elapsed time on the web. Depending on the browser and OS, Date
's resolution can be as low as 15 milliseconds. One millisecond at best. As John Resig brought to note, that isn't sufficient for benchmarking.
Mono-what-ic?
Perhaps less often considered is that Date
, based on system time, isn't ideal for real user monitoring either. Most systems run a daemon which regularly synchronizes the time. It is common for the clock to be tweaked a few milliseconds every 15-20 minutes. At that rate about 1% of 10 second intervals measured would be inaccurate.
Try it out
Like Date
, now
returns a number in milliseconds. Unlike Date
, now
's value is:
- a
double
with microseconds in the fractional - relative to the
navigationStart
of the page rather than to the UNIX epoch - not skewed when the system time changes
If you're using Date
for any performance measurement, add this shim to upgrade to performance.now()
with a fall back to Date
for older browsers.
window.performance = window.performance || {}; performance.now = (function() { return performance.now || performance.mozNow || performance.msNow || performance.oNow || performance.webkitNow || function() { return new Date().getTime(); }; })();