Rumah  >  Artikel  >  hujung hadapan web  >  Mengapa Mengubahsuai [[Prototaip]] Objek Mempengaruhi Prestasi?

Mengapa Mengubahsuai [[Prototaip]] Objek Mempengaruhi Prestasi?

Susan Sarandon
Susan Sarandonasal
2024-11-01 00:22:02486semak imbas

Why Does Modifying an Object's [[Prototype]] Impact Performance?

Kesan Mengubah Suai [[Prototaip]] Objek pada Prestasi

Dokumentasi Mozilla untuk kaedah setPrototypeOf standard dan __proto__ bukan standard sifat memberi amaran terhadap memutasi [[Prototaip]] objek, menekankan kesan buruknya terhadap prestasi dalam pelaksanaan JavaScript moden.

Walau bagaimanapun, amaran ini tidak berkenaan untuk menambahkan fungsi ahli pada kelas menggunakan Function.prototype seperti ini :

function Foo(){}
function bar(){}

var foo = new Foo();
Foo.prototype.bar = bar;
console.log(foo.__proto__.bar == bar); // true

Dalam contoh ini, kedua-dua foo.__proto__.bar = bar dan Foo.prototype.bar = bar mencapai hasil yang sama tanpa implikasi prestasi.

Isu timbul apabila penugasan semula berlaku kepada sifat __proto__ itu sendiri:

function Employee() {}
var fred = new Employee();

fred.__proto__ = Object.prototype;
// Or equally:
Object.setPrototypeOf(fred, Object.prototype);

Amaran dalam dokumentasi secara jelas menyatakan bahawa mengubah suai rantai prototaip objek sedia ada mengganggu pengoptimuman yang dilakukan oleh enjin JavaScript moden. Ia mencadangkan mencipta objek baharu dengan rantaian prototaip yang diingini menggunakan Object.create().

Kemerosotan prestasi ini berpunca daripada butiran pelaksanaan dalaman kelas tersembunyi dalam enjin JavaScript seperti V8. Apabila rantaian prototaip objek diubah, jenis dalamannya berubah, pengoptimuman carian harta menjadi tidak sah dan kod yang disusun.

Pakar dalam komuniti JavaScript telah menyerlahkan kerumitan dan risiko pepijat yang dikaitkan dengan membenarkan mutasi prototaip selepas penciptaan, memetik kesan buruknya terhadap inferens jenis, proksi dan kestabilan prestasi.

Oleh itu, semasa mengubah suai fungsi ahli menggunakan Function.prototype tidak menimbulkan kebimbangan prestasi, penugasan semula sifat __proto__ sesuatu objek harus dielakkan untuk mengelakkan penalti pengoptimuman.

Atas ialah kandungan terperinci Mengapa Mengubahsuai [[Prototaip]] Objek Mempengaruhi Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn