Tempo em JavaScript
-
10-07-2019 - |
Pergunta
Estou testando de velocidade alguns programas JavaScript criando um objeto de data e usando -o para obter tempo em milissegundos antes e depois do trabalho real da função. Fiz o corpo uma adição simples para o loop e, em seguida, a extremidade está subtraindo o antigo MS do novo MS e imprimindo isso. No entanto, tudo termina em 0 milissegundos ... o que faz sentido como o momento em que eu o verifico com uma gravação é o mesmo antes e depois do trabalho. Estou fazendo certo, e o JavaScript (no Chrome) é um raio rápido ou há algumas coisas dos bastidores que estão atrapalhando minhas variáveis.
Solução
Enquanto o objeto Data retorna os tempos em milissegundos, essa não é realmente a resolução do temporizador por trás dele. Como exemplo, o cronômetro pode marcar uma vez a cada 10 ms. Se o seu processo levar apenas 3 ms, na maioria das vezes você não verá uma medição diferente de zero (e às vezes verá 10 ms).
A solução é executar sua função muitas vezes e tempo tudo. Por exemplo, execute um milhão de vezes e divida o tempo total em 1000000 para obter o tempo médio de uma corrida.
Outras dicas
Veja meu Responda a esta pergunta Para como você pode implementar algumas comparações simples de referência. Como o @Greg Hewgill apontou, é importante executar o teste várias vezes para obter uma representação precisa de quanto tempo um teste específico realmente testa.
Normalmente, tudo se resume a algo tão simples quanto:
var MAX = 100000, i = 0,
s = null, e = null;
console.info("`someMethodToTest()` over %d iterations", MAX);
s = new Date();
do {
someMethodToTest();
} while ( ++i < MAX );
e = new Date();
console.log("Total: %dms; average: %dms", +e - +s, (+e - +s) / MAX);
Nós realmente precisamos ver seu código. Seja como for, um possível motivo para o zero é que seu loop está executando de forma assíncrona: o intérprete não espera até o final do loop antes de saltar a próxima instrução. Ou, é claro, seu loop pode ser um raio rápido.
BTW, você pode estar interessado em usar um Profiler JavaScript. Firebug Para o Firefox, tem um bom. Você só precisa abrir o console e bater Perfil.