Hace dos días, cuando encontré jsperf.com que tiene una colección de muchas pruebas de rendimiento de JavaScript, examiné varias pruebas.¿Por qué Firefox y otros navegadores funcionan de manera opuesta al calcular qué número es más grande?
Una de las pruebas fue this, que compara Math.min(a,b)
vs a<b?a:b
. Cuando ejecuté esta prueba en Google Chrome, resultó que a<b?a:b
es mucho más rápido que Math.min(a,b)
(en Chrome 14, el primero es 53,661,381 ops/s
y el segundo es 419,830,711 ops/s
). Otros navegadores web tienen resultados similares.
Sin embargo, en Firefox, el resultado es opuesto. Math.min(a,b)
es mucho más rápido que a<b?a:b
! El primero es 374,219,869 ops/s
y segundo es 79,490,749 ops/s
en Firefox 6.
Cuando publiqué esto en Facebook, alguien dijo que "Dado que Firefox es un proyecto de código abierto, los desarrolladores han optimizado Math.min
, pero Google Chrome no lo hizo , ya que Google Chrome es solo una modificación de Chromium ", pero (al margen de esa declaración anterior no es del todo correcta) no tiene sentido, porque eso no explica la razón por la cual a<b?a:b
de Google Chrome y Math.min(a,b)
de Firefox funcionan con velocidad similar, y Google El Math.min(a,b)
de Chrome y el a<b?a:b
de Firefox funcionan a la misma velocidad, porque si Firefox es más rápido que Google Chrome, entonces Googl El Math.min(a,b)
de Chrome debería ser mucho más lento que el a<b?a:b
de Firefox.
Resumen:
- En los otros navegadores,
a<b?a:b
es más rápido queMath.min(a,b)
. - Sin embargo, en Firefox,
Math.min(a,b)
es más rápido quea<b?a:b
. - Puesto que la velocidad de
Math.min(a,b)
en Firefox ≒ la velocidad dea<b?a:b
en Google Chrome y la velocidad dea<b?a:b
en Firefox ≒ la velocidad deMath.min(a,b)
en Google Chrome, "Firefox es lento" o "Firefox es rápido" no puede ser una razón .
¿Hay alguna razón por la que (cómo) sucede esto?
¿Razón? Además de eso, cada uno de los navegadores nombrados tiene sus propias implementaciones de JavaScript y, por lo tanto, pueden optimizar de la forma que deseen. – Jamiec
@Jamiec Pero creo que 'a JiminP
@Jiminip La llamada a' Math.min' se compilará y el método tal vez estará en línea. Tal vez en Firefox está en línea con código súper rápido, mientras que el 'si' sigue siendo un' si'. – xanatos