2012-07-20 6 views
7

Pregunta rápida que realmente no he tenido la oportunidad de investigar. ¿Cuál es más eficaz cuando se utiliza en una llamada/aplicar tipo de contexto: Array.prototype frente a []?Array.prototype vs [] perf

ej .:

function test1() { 
    return Array.prototype.splice.apply(arguments, [1, 2]); 
} 

test1([1,2,3,4,5,6,7,8,9]); 

function test2() { 
    return [].splice.apply(arguments, [1, 2]); 
} 

test1([1,2,3,4,5,6,7,8,9]); 

Mis pensamientos: yo asumiría la forma Array.prototype es más performante porque una función prototipo puede ser reutilizado y se creará ninguna necesidad literal. Aunque no estoy muy seguro.

Usando JSPerf (con cromo) parece que el Array.prototype es de hecho un poco más performante:

http://jsperf.com/array-perf-prototype-vs-literal

+0

Espero que el 'Array.prototype.splice' sea más rápido por el motivo que enumeró; no hay creación de objetos adicionales. Sin embargo, esto es una micro-optimización en el mejor de los casos, y debe enfocarse en la legibilidad en estas situaciones. – Matt

+0

* de acuerdo * ¿Qué es más legible en tu opinión? Me inclinaría por Array.prototype, pero sigo viendo [] usado en libs, etc. –

+0

Estoy de acuerdo con 'Array.prototype' al respecto, aunque Dpolehonski hace un buen punto en su respuesta sobre la reducción en bytes cuando usas '[]'. Creo que los beneficios de cualquiera de los enfoques son tan menores, que se reduce a preferencia personal más que a cualquier otra cosa. – Matt

Respuesta

3

Depende del navegador que se ejecuta la misma. En cromo parece que .prototype es más rápido, firefox no muestra ninguna diferencia entre los dos, aunque generalmente rinde más lento que Chrome. IE9 muestra un gran aumento de velocidad para .prototype, pero es el navegador más lento con diferencia.

Sin embargo, este tipo de optimización es tan pequeña que podría argumentarse que el tiempo ahorrado se compensa con los bytes adicionales necesarios para leer el código. Sin embargo, estoy divagando. Si estos son los mayores problemas de rendimiento contra los que te encuentras, ¡entonces realmente no tienes ningún problema con la optimización!

EDIT:

he añadido una prueba adicional here donde solía la matriz introducida en la función de llamar a la función de empalme que se presentó como más rápido que tanto en tanto IE, Chrome y Firefox. Mi conclusión, si ya tiene la matriz a mano, úsela, de lo contrario use el prototipo.

+0

Gracias chicos realmente útiles comentarios! La idea de la matriz fn cache es inteligente. Probé las revisiones en diferentes navegadores y también llegué a la misma conclusión, depende del motor JS del navegador. Además, acordaron sobre la micro optimización. La mayoría de mis problemas de rendimiento provienen de las interacciones DOM. –

Cuestiones relacionadas