wolf tan seguro porque por para pagina onion navegar lento guia fire como acelerar javascript node.js performance

javascript - seguro - ¿Por qué la creación de objetos con claves alfanuméricas es tan lenta en las nuevas versiones de nodo?



porque tor es tan lento (1)

Ejecuto esta prueba en diferentes versiones de nodo:

function test() { var i; var bigArray = {}; var start = new Date().getTime(); for (i=0; i<100000; i+=1) { bigArray[i] = {}; var j= Math.floor(Math.random() * 10000000); bigArray[i]["a" + j] = i.toString(32); if (i % 1000 === 0) console.log(i); } var end = new Date().getTime(); var time = end - start; console.log(''Execution time: '' + time); } test();

Como puede ver, solo crea un objeto con 100000 campos donde cada campo es solo un objeto con solo un campo. La clave de este objeto interno es forzada a ser alfanumérica (si la clave es numérica, su desempeño es normal).

Cuando ejecuto esta prueba en diferentes implementaciones / versiones de javascript, obtengo estos resultados:

v0.8.28 -> 2716 ms v0.10.40 -> 73570 ms v0.12.7 -> 92427 ms iojs v2.4.0 -> 510 ms chrome -> 1473 ms

También he intentado ejecutar esta prueba en un bucle asíncrono (cada paso de bucle en una marca diferente), pero los resultados son similares a los que se muestran arriba.

No puedo entender por qué esta prueba es tan costosa en las versiones más nuevas de los nodos. ¿Por qué es tan lento? ¿Hay alguna bandera v8 especial que pueda mejorar esta prueba?


Para manejar matrices grandes y dispersas, hay dos tipos de almacenamiento de matriz internamente:

  • Elementos rápidos : almacenamiento lineal para conjuntos de claves compactos
  • Elementos del diccionario : hash table storage de lo contrario

Es mejor no hacer que el almacenamiento de matriz cambie de un tipo a otro.

Por lo tanto:

  • Utilice claves contiguas que comienzan en 0 para Arrays
  • No preasigne grandes Arrays (por ejemplo, elementos de 64K) a su tamaño máximo, en lugar de eso, crezca a medida que avanza
  • No elimine elementos en matrices, especialmente matrices numéricas
  • No cargue elementos sin inicializar o eliminados

Fuente y más información: http://www.html5rocks.com/en/tutorials/speed/v8/

PD: se supone que esto mejorará considerablemente en la próxima versión de node.js + io.js.