Contexte
Le langage JavaScript propose deux méthodes pour manipuler la propriété prototype d'un objet : la fonction standard setPrototypeOf et la propriété non standard __proto__. Cependant, il est fortement déconseillé de muter le prototype d'un objet en utilisant l'une ou l'autre de ces méthodes.
Implications sur les performances
Selon la documentation MDN, la mutation du prototype ralentit considérablement l'exécution ultérieure dans les implémentations JavaScript modernes. En effet, le processus implique de changer le type de l'objet, ce qui invalide le code précédemment optimisé et oblige l'interpréteur à le désoptimiser. Ce processus de désoptimisation peut avoir un impact significatif sur les performances.
Comparaison des méthodes de mutation
Les deux foo.__proto__.bar = bar et Foo.prototype.bar = bar create une propriété bar sur l'objet Object.getPrototypeOf(foo). Cependant, la définition de la propriété __proto__ elle-même, comme dans fred.__proto__ = Object.prototype ou Object.setPrototypeOf(fred, Object.prototype), est ce qui déclenche la dégradation des performances.
Raisons sous-jacentes
Changer la chaîne de prototypes d'un objet existant perturbe les optimisations de type internes employées par les moteurs JavaScript. Le moteur doit supprimer le code précédemment compilé et revenir à du code non optimisé, ce qui entraîne une pénalité de performances.
Opinions d'experts
Divers experts ont exprimé leurs inquiétudes concernant les prototypes mutables :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!