Recientemente descubrí un cuello de botella en una aplicación web. Pude reducir hasta donde está, agregando algunas pruebas de Jest que usan performance.now() para cronometrar aproximadamente la ejecución de la función.
test(... const avg = Array(numberOfReps).fill(null).reduce((agg)=>{ const m0 = performance.now(); doThing(); const m1 = performance.now(); return agg + ((m1 - m0)/numberOfReps); }, 0) )En la mayoría de los casos, me sentiría cómodo deteniéndome aquí. Pero, el cuello de botella está en una parte de la aplicación que se usará mucho. Y, si bien los memorandos han ayudado, la velocidad de la primera ejecución también es muy importante.
Necesito estar seguro dentro de 2 sigma al 20% de que los tiempos informados por mis pruebas son precisos. Por ejemplo, si mis pruebas informan una ejecución de 1000 ms, necesito saber que el 95 % de las ejecuciones de tamaño n se encuentran entre 800 y 1200 ms.
¿Las pruebas de rendimiento a la anterior en Jest se ajustan a este proyecto de ley? Todavía no he podido encontrar respuestas útiles en otros lugares.
Editar: soy consciente de que el rendimiento. Ahora () es preciso. Pero desconfío de que Jest pueda inyectar complementos o usar algún tipo de bus que haga que el tiempo total sea menos preciso, es decir, ejecute otras funciones entre m0 y m1. ¿Es esa una preocupación válida?
PerformanceNow devuelve un DomHighResTimeStamp .
El tiempo, expresado en milisegundos, debe tener una precisión de 5 µs (microsegundos), y la parte fraccionaria del número indica fracciones de milisegundo. Sin embargo, si el navegador no puede proporcionar un valor de tiempo con una precisión de 5 µs (debido, por ejemplo, a restricciones de hardware o software), el navegador puede representar el valor como un tiempo en milisegundos con una precisión de milisegundos.