Mengapa Mengubah Suai [[Prototaip]] Objek Pembunuh Prestasi?
Rangkaian Pembangun Mozilla (MDN) menasihatkan supaya tidak mengubah objek [[Prototaip]], tanpa mengira kaedah yang digunakan. Amaran ini berpunca daripada penalti prestasi ketara yang dikenakan pada pelaksanaan JavaScript moden.
Semasa menambah fungsi ahli pada kelas JavaScript melalui Function.prototype disyorkan, kedua-dua operasi berikut:
foo.__proto__.bar = bar; Foo.prototype.bar = bar;
adalah fungsian setara dan cipta 'sifat bar pada objek Object.getPrototypeOf(foo)`.
Isunya bukan pada mencipta sifat 'bar`, tetapi dalam menugaskan kepada sifat '__proto__ itu sendiri:
fred.__proto__ = Object.prototype;
Operasi ini memecahkan pengoptimuman enjin JavaScript untuk akses harta benda. Dengan mengubah suai rantai prototaip objek sedia ada, anda secara berkesan memusnahkan sebarang usaha pengoptimuman terdahulu.
Enjin JavaScript V8, contohnya, menggunakan kelas tersembunyi untuk mengoptimumkan carian harta benda. Menukar rantaian prototaip membatalkan pengoptimuman ini, memaksa enjin kembali kepada kaedah yang kurang cekap.
Pakar dalam bidang telah menyatakan kebimbangan tentang implikasi prestasi prototaip boleh ubah:
Konsensus adalah jelas: mengubah [[Prototaip]] objek mengganggu pengoptimuman prestasi dan harus dielakkan. Sebaliknya, mencipta objek baharu dengan rantai prototaip unik menggunakan Object.create() ialah pendekatan pilihan.
Atas ialah kandungan terperinci Mengapakah Mengubah Suai [[Prototaip]] Objek merupakan Pembunuh Prestasi dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!