¿Existe un paquete que me ayude a comparar el código JavaScript? No me refiero a Firebug y esas herramientas.
Necesito comparar 2 funciones de JavaScript diferentes que he implementado. Estoy muy familiarizado con el módulo Benchmark ( Benchmark.pm ) de Perl y estoy buscando algo similar en JavaScript.
¿Se ha exagerado el énfasis en la evaluación comparativa del código JavaScript? ¿Puedo cronometrar solo una ejecución de las funciones?
javascript
benchmarking
Morsa iónica
fuente
fuente
Respuestas:
Solo calcula varias iteraciones de cada función. Una iteración probablemente no sea suficiente, pero (dependiendo de qué tan complejas sean sus funciones) un lugar más cercano a 100 o incluso 1,000 iteraciones debería hacer el trabajo.Firebug también tiene un generador de perfiles si desea ver qué partes de su función la están ralentizando.Editar: Para los futuros lectores, la siguiente respuesta que recomienda JSPerf debería ser la respuesta correcta. Eliminaría el mío, pero no puedo porque ha sido seleccionado por el OP. La evaluación comparativa implica mucho más que simplemente ejecutar muchas iteraciones, y JSPerf se encarga de eso por usted.
fuente
jsperf.com es el sitio de referencia para probar el rendimiento de JS. Empiece por ahí. Si necesita un marco para ejecutar sus propias pruebas desde la línea de comandos o scripts, use Benchmark.js , la biblioteca sobre la que está construido jsperf.com.
Nota: Cualquiera que pruebe código Javascript debe informarse sobre las trampas de los "microbenchmarks" (pequeñas pruebas que apuntan a una función u operación específica, en lugar de pruebas más complejas basadas en patrones de código del mundo real). Estas pruebas pueden ser útiles, pero son propensas a la inexactitud debido a cómo funcionan los tiempos de ejecución de JS modernos. Vale la pena ver la presentación de Vyacheslav Egorov sobre desempeño y evaluación comparativa para tener una idea de la naturaleza de los problemas.
Editar: Se eliminaron las referencias a mi trabajo de JSLitmus porque ya no es relevante ni útil.
fuente
Simplemente agregando un temporizador rápido a la mezcla, que alguien puede encontrar útil:
Idealmente, se colocaría en una clase y no se usaría como global como lo hice para los propósitos de ejemplo anteriores. Usarlo sería bastante simple:
fuente
performance.now()
lugar deDate()
developer.mozilla.org/en-US/docs/Web/API/Performance/nowDe forma sencilla.
fuente
He estado usando esta implementación simple de la respuesta de @musicfreaks. No tiene funciones, pero es muy fácil de usar. Esto
bench(function(){return 1/2;}, 10000, [], this)
calculará 1/2 10,000 veces.fuente
Es realmente difícil escribir puntos de referencia decentes entre navegadores. Simplemente cronometrar un número predefinido de iteraciones de su código no es en absoluto infalible .
Como ya sugirió @broofa, consulte jsPerf . Utiliza Benchmark.js detrás de escena.
fuente
Si escribe un script de referencia personalizado, asegúrese de tener en cuenta que algunos navegadores aplican manipulaciones de dom solo después de que finaliza la función en la que están definidos. Más detalles aquí http://www.quirksmode.org/blog/archives/2009/08/when_to_read_ou.html
fuente
Si necesita algo simple, puede hacer esto:
Aquí hay un ejemplo del código.
fuente