Pourquoi la modification du [[Prototype]] de l'objet tue-t-elle les performances ?
Le Mozilla Developer Network (MDN) déconseille fortement de modifier un le [[Prototype]] de l'objet, quelle que soit la méthode utilisée. Cet avertissement découle des pénalités de performances importantes qu'il encourt sur les implémentations JavaScript modernes.
Bien que l'ajout de fonctions membres aux classes JavaScript via Function.prototype soit recommandé, les deux opérations suivantes :
foo.__proto__.bar = bar; Foo.prototype.bar = bar;
sont fonctionnellement équivalent et créez une propriété 'bar` sur l'objet Object.getPrototypeOf(foo)`.
Le problème ne réside pas dans la création de la propriété 'bar`, mais dans l'attribution à la propriété '__proto__ elle-même :
fred.__proto__ = Object.prototype;
Cette opération rompt les optimisations du moteur JavaScript pour l'accès aux propriétés. En modifiant la chaîne de prototypes d'un objet existant, vous détruisez efficacement tous les efforts d'optimisation antérieurs.
Le moteur JavaScript V8, par exemple, utilise des classes cachées pour optimiser les recherches de propriétés. La modification de la chaîne de prototypes invalide ces optimisations, obligeant le moteur à recourir à des méthodes moins efficaces.
Les experts dans le domaine ont exprimé leurs inquiétudes quant aux implications en termes de performances des prototypes mutables :
Le consensus est clair : la mutation du [[Prototype]] d'un objet perturbe les optimisations des performances et doit être évitée. Au lieu de cela, créer de nouveaux objets avec des chaînes de prototypes uniques à l'aide de Object.create() est l'approche préférée.
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!