Warum ist das Ändern des [[Prototyps]] des Objekts ein Leistungskiller?
Das Mozilla Developer Network (MDN) rät dringend davon ab, ein zu ändern Der [[Prototyp]] des Objekts, unabhängig von der verwendeten Methode. Diese Warnung ist auf die erheblichen Leistungseinbußen zurückzuführen, die bei modernen JavaScript-Implementierungen auftreten.
Während das Hinzufügen von Mitgliedsfunktionen zu JavaScript-Klassen über Function.prototype empfohlen wird, gelten die beiden folgenden Vorgänge:
foo.__proto__.bar = bar; Foo.prototype.bar = bar;
sind funktional äquivalent und erstellen Sie eine „bar-Eigenschaft“ für das Object.getPrototypeOf(foo)“-Objekt.
Das Problem liegt nicht in der Erstellung der „bar“-Eigenschaft, sondern in der Zuweisung zur „__proto__“-Eigenschaft selbst:
fred.__proto__ = Object.prototype;
Dieser Vorgang unterbricht die JavaScript-Engine-Optimierungen für den Zugriff auf Eigenschaften. Indem Sie die Prototypenkette eines vorhandenen Objekts ändern, machen Sie alle vorherigen Optimierungsbemühungen effektiv zunichte.
Die V8-JavaScript-Engine verwendet beispielsweise versteckte Klassen, um die Suche nach Eigenschaften zu optimieren. Eine Änderung der Prototypenkette macht diese Optimierungen ungültig und zwingt die Engine, auf weniger effiziente Methoden zurückzugreifen.
Experten auf diesem Gebiet haben Bedenken hinsichtlich der Auswirkungen veränderlicher Prototypen auf die Leistung geäußert:
Der Konsens ist klar: Das Mutieren des [[Prototyps]] eines Objekts beeinträchtigt die Leistungsoptimierung und sollte vermieden werden. Stattdessen ist die Erstellung neuer Objekte mit eindeutigen Prototypketten mithilfe von Object.create() der bevorzugte Ansatz.
Das obige ist der detaillierte Inhalt vonWarum ist das Ändern des [[Prototyps]] eines Objekts ein Leistungskiller in JavaScript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!