Last Updated: February 25, 2016
·
14.03K
· avnerner

How to measure your Javascript to the nanosecond level?

All major browsers and Node supports a very easy logging method to measure execution time of your Javascript for easy profiling.

Say you have a long running loop:

var arr = [] , loopCount = 5000;
    for (var i=0 ; i <loopCount; i++){
        arr.push(Math.random() * 50000);
    }

To measure the overall execution time simply wrap with console.time() and console.timeEnd() :

var title= "Loop on numbers"
console.time(title);
var arr = [] , loopCount = 5000;
    for (var i=0 ; i <loopCount; i++){
        arr.push(Math.random() * 50000);
    }
console.timeEnd(title);

The execution will be printed in the console in a milliseconds accuracy.

At times, you might want to measure something to the nanosecond level.

Node.JS provides a way to do that using the High Resolution process API, here is the same loop using process.hrtime():

var title= "Loop on numberss", t = process.hrtime();
var arr = [] , loopCount = 5000;
for (var i=0 ; i <loopCount; i++){
    arr.push(Math.random() * 50000);
}
var t1 = process.hrtime(t);
console.log("%s %d seconds and %d nanoseconds", title, t1[0], t1[1]);

<Later that day> Edit :
Paul Irish posted the following timely post: http://updates.html5rocks.com/2012/08/When-milliseconds-are-not-enough-performance-now

Demonstrating the usage of:
window.performance.webkitNow()
For High resolution accuracy on the browser as well.

Have a fresh tip? Share with Coderwall community!

Post
Post a tip
Did you know?

JavaScript on a page runs with the privileges of that origin. One altered library, tag manager, or snippet can read inputs, change what people see, and call your APIs as the user.

Security insights from Cside