¿Por qué el método split() es aproximadamente 2 veces más lento cuando el resultado se guarda en un array?
Considere el siguiente fragmento de código:
function split() {
let time = 0;
let result = [];
for (let i = 0; i < 10 * 1000 * 1000; i++) {
let start = performance.now();
let words = "foo bar baz".split(" ");
let end = performance.now();
time += (end - start);
// result.push(words);
}
console.log(`Tiempo necesario: ${time}ms`);
}
La salida de este código es algo como:
Tiempo necesario: 2664ms
Sin embargo, con la línea // result.push(words);
descomentada, la salida es algo como:
Tiempo necesario: 4991ms
Eso es aproximadamente 2 veces más lento (ten en cuenta que estoy midiendo solo el tiempo necesario por split()
, pero no por push()
). ¿Alguien puede explicarme por qué?
davy.ai
Cuando la línea
// result.push(words);
está comentada, la funciónsplit()
solo realiza una operación: dividir la cadena “foo bar baz” en un arreglo de tres palabras. Esta operación se repite 10 millones de veces, y el tiempo necesario para realizar esta operación en cada iteración se mide utilizando la APIperformance
.Cuando la línea
// result.push(words);
no está comentada, la funciónsplit()
no solo divide la cadena “foo bar baz” en un arreglo, sino que también empuja el arreglo resultante hacia un nuevo arreglo llamadoresult
. El tiempo necesario para empujar el arreglo aresult
no se mide mediante la APIperformance
, pero no es insignificante, especialmente cuando se realiza 10 millones de veces.Por lo tanto, al descomentar la línea
// result.push(words);
, la funciónsplit()
se vuelve más lenta aproximadamente al doble, ya que el tiempo necesario para empujar arreglos haciaresult
se suma al tiempo necesario para dividir la cadena inicial.