Latar Belakang
Bahasa JavaScript menyediakan dua kaedah untuk memanipulasi sifat prototaip objek: fungsi setPrototypeOf standard dan sifat __proto__ bukan standard. Walau bagaimanapun, adalah sangat tidak digalakkan untuk memutasi prototaip objek menggunakan salah satu daripada kaedah ini.
Implikasi Prestasi
Menurut dokumentasi MDN, mengubah prototaip dengan ketara memperlahankan menurunkan pelaksanaan berikutnya dalam pelaksanaan JavaScript moden. Ini kerana proses itu melibatkan penukaran jenis objek, yang membatalkan kod yang dioptimumkan sebelum ini dan memaksa penterjemah untuk menyahoptimumkan. Proses penyahoptimuman ini boleh memberi kesan yang ketara ke atas prestasi.
Perbandingan Kaedah Bermutasi
Kedua-dua foo.__proto__.bar = bar dan Foo.prototype.bar = bar create sifat bar pada objek Object.getPrototypeOf(foo). Walau bagaimanapun, menetapkan sifat __proto__ itu sendiri, seperti dalam fred.__proto__ = Object.prototype atau Object.setPrototypeOf(fred, Object.prototype), adalah perkara yang mencetuskan kemerosotan prestasi.
Sebab Dasar
Menukar rantai prototaip objek sedia ada akan mengganggu pengoptimuman jenis dalaman yang digunakan oleh enjin JavaScript. Enjin mesti membuang kod yang disusun sebelum ini dan kembali kepada kod yang tidak dioptimumkan, yang membawa kepada penalti prestasi.
Pendapat Pakar
Pelbagai pakar telah menyatakan kebimbangan mengenai prototaip boleh ubah :
Alternatif
Daripada memutasi prototaip objek sedia ada, adalah disyorkan untuk mencipta objek baharu dengan rantaian prototaip yang berbeza menggunakan Object.create(). Pendekatan ini mengekalkan pengoptimuman dan mengelakkan penalti prestasi yang dikaitkan dengan mutasi prototaip.
Atas ialah kandungan terperinci Mengapa Pengubahsuaian Prototaip Objek Membawa kepada Kemerosotan Prestasi dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!