Como medir seu Javascript ao nível de nanossegundos?

Todos os principais navegadores e Node suportam um método de registro muito fácil para medir o tempo de execução de seu Javascript para facilitar a criação de perfil.

Digamos que você tenha um loop de longa duração:

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

Para medir o tempo de execução geral, basta agrupar com console.time () e 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);

A execução será impressa no console com uma precisão de milissegundos.

Às vezes, você pode querer medir algo ao nível de nanossegundos.

Node.JS fornece uma maneira de fazer isso usando a API de processo de alta resolução, aqui está o mesmo loop usando 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]);

<Mais tarde naquele dia> Editar:
Paul Irish postou a seguinte postagem oportuna: http://updates.html5rocks.com/2012/08/When-milliseconds-are-not-enough-performance-now

Demonstrando o uso de:
window.performance.webkitNow ()
Para precisão de alta resolução no navegador também.