Qu'est-ce que la performance des Objets ou des Tableaux en JavaScript? (spécifiquement pour Google V8)

De Performance associés à des Tableaux et des Objets en JavaScript (en particulier Google V8) serait très intéressant de document. Je ne trouve aucun article complet sur ce sujet n'importe où sur Internet.

Je comprends que certains Objets de l'utilisation des classes que leurs données sous-jacentes de la structure. Si il y a un grand nombre de propriétés, il est parfois traitée comme une table de hachage?

Je comprends aussi que les Tableaux sont parfois traités comme C++ Tableaux (c'est à dire aléatoire rapide de l'indexation, de lent, de suppression et de redimensionnement). Et, d'autres fois, ils sont traités plus comme des Objets (indexation rapide, rapide insertion/suppression, plus de mémoire). Et, peut-être que parfois ils sont stockés comme des listes liées (c'est à dire ralentir aléatoire de l'indexation, l'élimination rapide/insertion en début/fin)

Qu'est-ce que la précision et les performances de Tableau/Objet de récupérations et de manipulations en JavaScript? (spécifiquement pour Google V8)

Plus précisément, quel est l'impact sur les performances de:

  • Ajout d'une propriété à un Objet
  • Suppression d'une propriété d'un Objet
  • L'indexation d'une propriété à un Objet
  • L'ajout d'un élément à un Tableau
  • Suppression d'un élément dans un Tableau
  • L'indexation d'un élément dans un Tableau
  • L'Appel De Tableau.pop()
  • L'Appel De Tableau.push()
  • L'Appel De Tableau.maj()
  • L'Appel De Tableau.unshift()
  • L'Appel De Tableau.slice()

Des articles ou des liens pour plus de détails serait appréciée, ainsi. 🙂

EDIT: je me demande vraiment comment les tableaux JavaScript et des objets de travail sous le capot. Aussi, dans ce contexte le moteur V8 de "savoir" à "bascule" 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);

Ce qui se passe réellement ici?

Ou... quoi à ce sujet...???

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 réseaux classiques, le rendement serait terrible; considérant que, si une LinkedList a été utilisé... pas si mal.

  • Visitez le site jsperf.com, et de créer des cas de test.
  • Il n'y a plus en jeu ici que de simples tests peuvent rendre compte de ce qui nécessite la connaissance de la façon dont les compilateurs JIT travail, et ce qui est fait avec les données. Si je trouve le temps je vais ajouter une réponse, mais j'espère que quelqu'un aura le temps de passer aux choses sérieuses. Aussi, j'aimerais quitter ce lien ici
  • JIT choses dont je parle sont des choses comme la "forme" d'un objet, ou des tableaux avec des valeurs non définies entre les éléments définis, ainsi que plus récemment essayé de type spécialisé de fonctionnalités... tableau-méthodes spécifiques peuvent dépendre de l'utilisation ainsi que si le prototype a été manipulé ou non. Il n'y a pas une telle chose comme "un savoir" passer à un autre type de données autant que je sache.
  • Il y a des représentants de Google ont discuté, comment les différents optimiseur et du système interne des œuvres. Et comment les optimiser pour eux. (pour les jeux!!!) youtube.com/watch?v=XAqIpGU8ZZk
InformationsquelleAutor BMiner | 2011-12-07