Rumah > Artikel > hujung hadapan web > Mengapa Mengubahsuai [[Prototaip]] Objek Mempengaruhi Prestasi?
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!