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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top