O desempenho associado a matrizes e objetos em JavaScript (especialmente Google V8) seria muito interessante de documentar. Não encontro nenhum artigo abrangente sobre esse tópico em qualquer lugar da Internet.
Eu entendo que alguns objetos usam classes como sua estrutura de dados subjacente. Se houver muitas propriedades, às vezes é tratado como uma tabela hash?
Eu também entendo que as matrizes às vezes são tratadas como matrizes C ++ (ou seja, indexação aleatória rápida, exclusão e redimensionamento lento). E, outras vezes, são tratados mais como Objetos (indexação rápida, inserção / remoção rápida, mais memória). E, às vezes, eles são armazenados como listas vinculadas (ou seja, indexação aleatória lenta, remoção / inserção rápida no início / fim)
Qual é o desempenho preciso de recuperações e manipulações de Array / Objeto em JavaScript? (especificamente para Google V8)
Mais especificamente, qual é o impacto no desempenho de:
- Adicionando uma propriedade a um objeto
- Removendo uma propriedade de um objeto
- Indexando uma propriedade em um objeto
- Adicionando um item a uma matriz
- Removendo um item de uma matriz
- Indexando um item em uma matriz
- Chamando Array.pop ()
- Chamando Array.push ()
- Chamando Array.shift ()
- Chamando Array.unshift ()
- Chamando Array.slice ()
Quaisquer artigos ou links para mais detalhes também serão apreciados. :)
EDIT: Estou realmente me perguntando como os arrays e objetos JavaScript funcionam nos bastidores. Além disso, em que contexto o motor V8 "sabe" como "alternar" para outra estrutura de dados?
Por exemplo, suponha que eu crie uma matriz com ...
var arr = [];
arr[10000000] = 20;
arr.push(21);
O que realmente está acontecendo aqui?
Ou ... que tal isso ... ???
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 matrizes convencionais, o desempenho seria terrível; Considerando que, se um LinkedList foi usado ... não é tão ruim.