El rendimiento asociado con matrices y objetos en JavaScript (especialmente Google V8) sería muy interesante de documentar. No encuentro ningún artículo completo sobre este tema en Internet.
Entiendo que algunos Objetos usan clases como su estructura de datos subyacente. Si hay muchas propiedades, ¿a veces se trata como una tabla hash?
También entiendo que las matrices a veces se tratan como matrices C ++ (es decir, indexación aleatoria rápida, eliminación lenta y cambio de tamaño). Y, otras veces, se tratan más como Objetos (indexación rápida, inserción / remoción rápida, más memoria). Y, tal vez a veces se almacenan como listas vinculadas (es decir, indexación aleatoria lenta, eliminación / inserción rápida al principio / final)
¿Cuál es el rendimiento preciso de las recuperaciones y manipulaciones de matrices / objetos en JavaScript? (específicamente para Google V8)
Más específicamente, cuál es el impacto en el rendimiento de:
- Agregar una propiedad a un objeto
- Eliminar una propiedad de un objeto
- Indexar una propiedad en un objeto
- Agregar un elemento a una matriz
- Eliminar un elemento de una matriz
- Indexación de un elemento en una matriz
- Llamando a Array.pop ()
- Llamar a Array.push ()
- Llamar a Array.shift ()
- Llamar a Array.unshift ()
- Llamando a Array.slice ()
También se agradecería cualquier artículo o enlace para obtener más detalles. :)
EDITAR: Realmente me pregunto cómo funcionan las matrices y objetos de JavaScript bajo el capó. Además, ¿en qué contexto el motor V8 "sabe" "cambiar" a otra estructura de datos?
Por ejemplo, supongamos que creo una matriz con ...
var arr = [];
arr[10000000] = 20;
arr.push(21);
¿Qué está pasando realmente aquí?
O ... ¿qué hay de esto ... ???
var arr = [];
//Add lots of items
for(var i = 0; i < 1000000; i++)
arr[i] = Math.random();
//Now I use it like a queue...
for(var i = 0; i < arr.length; i++)
{
var item = arr[i].shift();
//Do something with item...
}
Para las matrices convencionales, el rendimiento sería terrible; mientras que, si se utilizó una LinkedList ... no tan mal.