Les performances associées aux tableaux et aux objets en JavaScript (notamment Google V8) seraient très intéressantes à documenter. Je ne trouve aucun article complet sur ce sujet sur Internet.
Je comprends que certains objets utilisent des classes comme structure de données sous-jacente. S'il y a beaucoup de propriétés, il est parfois traité comme une table de hachage?
Je comprends également que les tableaux sont parfois traités comme des tableaux C ++ (c'est-à-dire indexation aléatoire rapide, suppression lente et redimensionnement). Et, d'autres fois, ils sont traités plus comme des objets (indexation rapide, insertion / suppression rapide, plus de mémoire). Et peut-être qu'ils sont parfois stockés sous forme de listes liées (c'est-à-dire indexation aléatoire lente, suppression / insertion rapide au début / à la fin)
Quelles sont les performances précises des récupérations et manipulations de tableaux / objets en JavaScript? (spécifiquement pour Google V8)
Plus précisément, quel est l'impact sur les performances de:
- Ajouter une propriété à un objet
- Supprimer une propriété d'un objet
- Indexer une propriété dans un objet
- Ajout d'un élément à un tableau
- Suppression d'un élément d'un tableau
- Indexation d'un élément dans un tableau
- Appel de Array.pop ()
- Appel de Array.push ()
- Appel de Array.shift ()
- Appel de Array.unshift ()
- Appel de Array.slice ()
Tous les articles ou liens pour plus de détails seraient également appréciés. :)
EDIT: Je me demande vraiment comment les tableaux et objets JavaScript fonctionnent sous le capot. De plus, dans quel contexte le moteur V8 "sait-il" pour "basculer" vers une autre structure de données?
Par exemple, supposons que je crée un tableau avec ...
var arr = [];
arr[10000000] = 20;
arr.push(21);
Que se passe-t-il vraiment ici?
Ou ... qu'en est-il de ça ... ???
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...
}
Pour les tableaux conventionnels, les performances seraient terribles; alors que, si une LinkedList était utilisée ... pas si mal.