Pregunta

Estoy probando la velocidad de algunos programas de JavaScript creando un objeto Date y utilizándolo para obtener el tiempo en milisegundos antes y después del trabajo real de la función. Hice que el cuerpo sea una simple suma para el bucle, y luego el final está restando el ms antiguo del nuevo ms e imprimiéndolo. Sin embargo, todo termina en 0 milisegundos ... lo que tiene sentido ya que el momento en que lo reviso con una escritura es el mismo antes y después del trabajo. Lo estoy haciendo bien, y JavaScript (en Chrome) es increíblemente rápido, o hay algunas cosas detrás de escena que están arruinando mis variables.

¿Fue útil?

Solución

Si bien el objeto Date devuelve los tiempos en milisegundos, esa no es realmente la resolución del temporizador detrás de él. Como ejemplo, el temporizador puede marcar una vez cada 10 ms. Si su proceso solo toma 3 ms, entonces la mayoría de las veces no verá una medición distinta de cero (y a veces verá 10 ms).

La solución es ejecutar su función muchas veces y cronometrar todo. Por ejemplo, ejecútelo un millón de veces y divida el tiempo total entre 1000000 para obtener el tiempo promedio de una ejecución.

Otros consejos

Vea mi responda a esta pregunta sobre cómo podría implementar algunas comparaciones de referencia simples. Como señaló @Greg Hewgill, es importante ejecutar la prueba varias veces para obtener una representación precisa de cuánto tiempo realmente prueba una prueba específica.

Normalmente, se reduce a algo tan simple como:

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);

Realmente necesitaríamos ver tu código. Lo que sea, una posible razón para el cero es que su ciclo se ejecuta de forma asincrónica: el intérprete no espera hasta el final del ciclo antes de saltar a la siguiente instrucción. O, por supuesto, su ciclo puede ser muy rápido.

Por cierto, puede que te interese usar un generador de perfiles de JavaScript. Firebug para Firefox es muy bueno. Solo necesita abrir la consola y presionar Perfil .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top