You’ll notice the two above values are many orders of magnitude different. performance.now() is a measurement of floating point milliseconds since that particular page started to load (the performance.timing.navigationStart timeStamp to be specific). You could argue that it could have been the number of milliseconds since the unix epoch, but rarely does a web app need to know the distance between now and 1970. This number stays relative to the page because you’ll be comparing two or more measurements against eachother.

Monotonic time

Another added benefit here is that you can rely on the time being monotonic. Let’s let WebKit engineer Tony Gentilcore explain this one:

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.

Use Cases

There are a few situations where you’d use this high resolution timer instead of grabbing a basic timestamp:

benchmarking

game or animation runloop code

calculating framerate with precision

cueing actions or audio to occur at specific points in an animation or other time-based sequence