Mengapa Mengubahsuai [[Prototaip]] Objek Mempengaruhi Prestasi?

Susan Sarandon
Lepaskan: 2024-11-01 00:22:02
asal
485 orang telah melayarinya

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
Salin selepas log masuk

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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!