Le prestazioni associate agli array e agli oggetti in JavaScript (in particolare Google V8) sarebbero molto interessanti da documentare. Non trovo alcun articolo completo su questo argomento da nessuna parte su Internet.
Capisco che alcuni oggetti utilizzano le classi come struttura dati sottostante. Se ci sono molte proprietà, a volte viene trattata come una tabella hash?
Capisco anche che gli array a volte vengono trattati come array C ++ (cioè indicizzazione casuale veloce, eliminazione e ridimensionamento lenti). E, altre volte, sono trattati più come oggetti (indicizzazione veloce, inserimento / rimozione veloce, più memoria). E, forse a volte vengono memorizzati come elenchi collegati (ad esempio indicizzazione casuale lenta, rimozione / inserimento veloce all'inizio / alla fine)
Qual è la performance precisa dei recuperi e delle manipolazioni di array / oggetti in JavaScript? (specificamente per Google V8)
Più specificamente, qual è l'impatto sulle prestazioni di:
- Aggiunta di una proprietà a un oggetto
- Rimozione di una proprietà da un oggetto
- Indicizzazione di una proprietà in un oggetto
- Aggiunta di un elemento a un array
- Rimozione di un elemento da un array
- Indicizzazione di un elemento in un array
- Chiamata a Array.pop ()
- Chiamare Array.push ()
- Chiamata a Array.shift ()
- Chiamata a Array.unshift ()
- Chiamata a Array.slice ()
Anche qualsiasi articolo o collegamento per maggiori dettagli sarebbe apprezzato. :)
EDIT: Mi chiedo davvero come funzionano gli array e gli oggetti JavaScript sotto il cofano. Inoltre, in quale contesto il motore V8 "sa" di "passare" a un'altra struttura dati?
Ad esempio, supponiamo di creare un array con ...
var arr = [];
arr[10000000] = 20;
arr.push(21);
Cosa sta succedendo davvero qui?
Oppure ... che ne dici di questo ... ???
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...
}
Per gli array convenzionali, le prestazioni sarebbero terribili; considerando che, se è stata utilizzata una LinkedList ... non così male.