Tenía curiosidad por probar el rendimiento de JavaScript e investigué un poco al respecto.
Cuando hablo del rendimiento de JavaScript aquí, no me refiero a cosas como el tiempo hasta el primer byte, el tiempo hasta la interacción, etc. Estoy hablando de la velocidad de cálculo sin procesar: cuánto tiempo se ejecuta la función X en comparación con la función Y.
Descubrí que podemos usar dos métodos para probar el rendimiento: performance.now
y Date.now
. Tenía curiosidad sobre la diferencia entre ellos, así que hice algunos experimentos para documentar mis hallazgos.
El procedimiento
El procedimiento para probar el rendimiento es sencillo. Hay tres pasos:
- Verifique la marca de tiempo actual
- Ejecuta algunas operaciones
- Verifique la marca de tiempo nuevamente
La diferencia entre las dos marcas de tiempo será la cantidad de tiempo necesaria para ejecutar las operaciones.
Así es como se ve este proceso en el código:
Performance.now vs Date.now
performance.now
se dice que genera una marca de tiempo Dom de alta resolución , lo que significa que será más precisa que Date.now
.
Desafortunadamente, los navegadores tienen que completar esta marca de tiempo debido a problemas de seguridad, por lo que al final no hace mucha diferencia (según mis hallazgos).
Para ayudar con las pruebas, creé una perf
función.
También creé un Date.now
equivalente y lo nombréperfDate
Experimentos y hallazgos
Probé ambos performance.now
y Date.now
con una simple operación:
Mientras probaba, me di cuenta de que no tiene sentido probar una operación por dos razones.
Primero, performance.now
puede medir operaciones en microsegundos pero Date.now
no puede. Entonces no podremos ver las diferencias entre ellos.

En segundo lugar, performance.now
se redondea al milisegundo más cercano en Safari y Firefox. Así que no tiene sentido comparar nada que tome menos de 1 ms.

Tuve que aumentar las pruebas a 10 millones de operaciones antes de que los números comenzaran a tener sentido.

Hallazgo n. ° 1: Performance.now vs Date.now
Ejecuté este código:

Aquí, no encontré ninguna diferencia importante entre performance.now
y Date.now
.
Sin embargo, performance.now
parece más lento en Safari y Firefox. performance.now
también se redondea al milisegundo más cercano en Safari y Firefox.
Hallazgo n. ° 2: Chrome necesita tiempo para definir funciones
Intenté apilar perf
y perfDate
funciones para ver si había diferencias. Los resultados me sorprendieron.

Segunda y tercera prueba en Chrome para ambos perf
y perfDate
saltó de 8 ms a 80 ms. Eso es un aumento de 10 veces. ¡Pensé que estaba haciendo algo mal!
Descubrí que este aumento se debía a la definición de funciones sobre la marcha. Si utilicé una función predefinida, los números se redujeron a 8 ms.

Nota: También descubrí que Node's performance.now
tiene el mismo comportamiento que Chrome performance.now
.
Hallazgo n. ° 3: es imposible obtener un resultado promedio
Me di cuenta de cada uno performance.now
y Date.now
resultó en valores diferentes. Quería obtener un promedio de los resultados, así que agregué otro bucle a perf
.
(Yo también hice lo mismo perfDate
).
Pero los resultados fueron extraños: el tiempo transcurrido para el segundo ciclo en adelante se redujo a cero. Esto sucedió para ambos perf
y perfDate
.

¡También sucedió con los tres navegadores!

No estoy seguro de qué pasa aquí. Si sabes por qué, ¡dímelo!
Conclusión
Ambos performance.now
y Date.now
se pueden utilizar para probar el rendimiento de JavaScript. Sin embargo, no hay una gran diferencia entre estos dos métodos.
Al realizar pruebas en Chrome, asegúrese de utilizar funciones predefinidas. No defina funciones sobre la marcha o obtendrá pruebas inexactas.
0 Comentarios
Dejanos tu comentario para seguir mejorando!