2011-12-24 22 views
7

¿Es [x,y,z].join('') realmente más rápido que x + y + z para cadenas?¿Es [x, y, z] .join ('') realmente más rápido que x + y + z para las cadenas?

Bajo la impresión de que join() es más rápido, empecé a través de mi código para utilizarlo en lugar de +, entonces me encontré con la siguiente línea en el código de Google Analytics:

ga.src = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 

Suponiendo que los programadores de Google están entre los más informados, me hace pensar. Por supuesto, esa línea solo se ejecutará una vez por carga de página, y se podría decir que cualquier diferencia de velocidad es insignificante. ¿Pero aún?

+1

La velocidad de una función está determinada por el código JavaScript implementación, que varía entre los navegadores. Para probar - http://jsperf.com/ – Bakudan

+1

Esto también es '[x, y] .join ('')'. Creo que el ahorro es con una mayor cantidad de argumentos (porque haces una llamada por adjuntar con '+' y join es solo una llamada de función.) – Hogan

+0

+ Bakudan, encontró una prueba que debería arrojar algo de luz: http: // jsperf .com/concat-vs-join2/4 – TJR

Respuesta

2

Usando Firebug consola en Firefox 6.0.2 usando el siguiente código:

b = new Date().getTime(); for (var i = 0; i < 10000; i++) {a = "sfhfdshdshsdh" + "sfhsfdhsfhdsfh" + "shsfdsdgsdgsgsdfgdfsgsfdghsdfhsdh";} c = new Date().getTime(); d = c - b; 

y

b = new Date().getTime(); for (var i = 0; i < 10000; i++) {a = ["sfhfdshdshsdh","sfhsfdhsfhdsfh","shsfdsdgsdgsgsdfgdfsgsfdghsdfhsdh"].join();} c = new Date().getTime(); d = c - b; 

I media en los años 40 bajos de "+" y 50s bajo para "unir", por lo parece que unirse es más lento. Esto es más probable debido a la necesidad de crear una matriz para unirse. También esto puede ser diferente en diferentes navegadores con diferentes intérpretes.

+2

Tal vez deberías probar [jspref.com] (http://jspref.com/). –

6

El método Array .join() (-trick) para concatenar cadenas tiene sus raíces en aquel entonces cuando los sitios web funcionaban en Internet Explorer les gusta mucho. Para IE6 + 7 es muy cierto que .join() es mucho más rápido que usar el operador + debido a un comportamiento realmente malo con operaciones de cadena en IE.

Para otros navegadores, la diferencia de rendimiento no era tan grande, por lo que era un buen consejo usar .join() (nuevamente, en aquel entonces). Hoy en día, la mayoría de los motores optimizan las operaciones de cadena a lo grande y, a menos que pienses que alguno de tus códigos se ejecuta mucho en IE6 + 7, solo debes usar +.

Cuestiones relacionadas