Debido a que acabo de escribir una aplicación web en la que una gran cantidad de matrices tiene que ser concatenados y donde el rendimiento es crítico , Probé qué método es el más rápido in this jsperf. Los resultados son muy interesantes.
En mi prueba, agrego 10 elementos a una lista o matriz de 10.000 elementos.
Aquí están los casos de prueba, del más rápido al más lento.Los resultados se miden en Chrome 62, pero Firefox 47 funciona de manera similar:
LinkedList.prototype.concat
: 90,313,485 ops/seg
list.concat(concatList);
// This function has to change only 1-2 refences
Array.prototype.push
en un bucle for: 3,794,962 ops/seg
for (var i = 0, len = concatArr.length; i < len; i++) {
array.push(concatArr[i]);
}
// Probably fastest in real life
Array.prototype.push.apply
: 2,193,469 ops/sec
array.push.apply(array, concatArr);
Array.prototype.concat
: 22701 ops/seg
array = array.concat(concatArr);
Por desgracia, la versión LinkedList
no funciona si quieres concat una matriz/lista para múltiplesLinkedList
s. Tampoco tiene ningún beneficio si se debe copiar una matriz a LinkedList
antes de cada operación de concat. Entonces, para mí, el ganador es el para el ciclo.
Una razón para no usar Array.prototype.push.apply
es que falla si la matriz concatenada es demasiado grande. De acuerdo con this answer, la matriz concatenada no puede tener más de 500,000 elementos en Firefox y 150,000 elementos en Chrome.
He excluido el spread operator porque no es compatible con todos los navegadores. En Chrome, es tan rápido como Array.prototype.push.apply
, en Firefox es un poco más lento.
posible duplicado de [Javascript arrastrar valores de matriz a otra matriz] (http://stackoverflow.com/questions/4156101/javascript-push-array-values-into-another-array), [cómo hacer un "plano push "en javascript?] (http://stackoverflow.com/questions/4007744/how-to-do-a-flat-push-in-javascript) – outis