3 votes

Pourquoi l'accès à la quatrième valeur imbriquée est-il beaucoup plus lent que celui à la cinquième ?

Je construisais un jsperf pour illustrer le temps qu'il fallait pour accéder aux membres des objets imbriqués et j'ai trouvé ce phénomène étrange. Pour une raison quelconque, l'exécution du test était nettement plus lente pour le quatrième membre de l'objet imbriqué que pour le cinquième. J'ai essayé dans Chrome et Firefox et j'ai obtenu les mêmes résultats.

enter image description here

Une idée de la raison pour laquelle cela se produit ?

5voto

Claudiu Points 58398

Votre objet est celui-ci, mon commentaire ajouté :

var obj = {
  "one": {
    "two": {
      "three": {
        "four": {
          "five": {
            "value": 0
          }
          /* MISSING "value": 0 */
        },
        "value": 0
      },
      "value": 0
    },
    "value": 0
  },
  "value": 0
};

} ;

L'objet au "four" n'a pas de "value" Il semble donc que le ou les moteurs JavaScript doivent effectuer un travail supplémentaire pour gérer ce cas : recherche de la clé sur l'objet manquée, recherche de la clé sur le prototype de l'objet manquée Object , retour undefined et ensuite calculer NaN lorsque vous ajoutez 1 à undefined .

1voto

Ted Hopp Points 122617

Le problème est que obj.one.two.three.four n'a pas de value attribut. Dans ce cas, JavaScript parcourt la chaîne de prototypes à la recherche de l'attribut manquant avant d'assigner finalement NaN à sum .

0voto

japrescott Points 1944

J'ai corrigé votre test. Il n'y avait pas de champ de valeur pour 'quatre'. J'ai également ajouté un processus d'écriture au test pour obtenir de meilleures valeurs ; ici vous avez le test jsperf corrigé

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X