WebAssembly lwn. JavaScript: A Performance Deep Dive
Siaran ini, sebahagian daripada siri di WebAssembly (lihat bahagian lain di sini: [pautan ke bahagian lain]), meneroka sebab WebAssembly sering mengatasi JavaScript. Asalnya diterbitkan di //m.sbmmt.com/link/9dded08b6cdd4ef785eb6cc9aa57c075.
Pelaksanaan JavaScript: Pandangan Lebih Dekat
Memahami kelebihan kelajuan WebAssembly memerlukan pemahaman proses pelaksanaan JavaScript. Rajah di bawah menggambarkan peringkat:
Carta ini menunjukkan masa relatif yang dibelanjakan dalam setiap fasa. Nota: Ini adalah perwakilan umum; pemasaan sebenar berbeza-beza merentas pelayar dan kerumitan kod.
Peringkatnya ialah:
-
Penghuraian: Mengubah JavaScript berasaskan teks kepada Pokok Sintaks Abstrak (AST). Ini berlaku selepas muat turun.
-
Menyusun & Mengoptimumkan: Penyemak imbas moden menggunakan kompilasi Just-In-Time (JIT). Pengkompil membuat kesimpulan jenis berdasarkan penggunaan, penyusunan dan cache untuk digunakan semula, yang membawa kepada pengoptimuman.
-
Mengoptimumkan semula: Andaian jenis pengkompil JIT tidak selalu tepat. Andaian yang salah memerlukan membuang versi yang dioptimumkan dan menyusun semula, menambah overhed.
-
Pelaksanaan: Menukar kod kepada arahan boleh laku dan melaksanakan baris demi baris.
-
Pengumpulan Sampah: Membersihkan memori yang tidak digunakan, memperkenalkan overhed tambahan.
Pelaksanaan WebAssembly: Pendekatan Diperkemas
Pelaksanaan WebAssembly jauh lebih diperkemas:
Langkahnya ialah:
-
Penyahkodan: Serupa dengan penghuraian JavaScript, tetapi lebih mudah kerana WASM tidak memerlukan penukaran kepada struktur yang kompleks. Selepas penyahkodan, integriti modul disahkan.
-
Menyusun & Mengoptimumkan: Kedekatan WebAssembly dengan kod mesin menjadikan penyusunan dan pengoptimuman lebih pantas. Penaipan statik menghapuskan keperluan untuk inferens jenis masa jalan, seterusnya mempercepatkan proses. Banyak pengoptimuman dilakukan semasa langkah binaan.
-
Pelaksanaan: Arahan yang telah disusun sebelumnya menghasilkan pelaksanaan yang lebih pantas.
Mengapa WebAssembly Menang
Berdasarkan hasil kerja Lin Clark, manfaat prestasi WebAssembly berpunca daripada beberapa faktor:
-
Mengambil: Fail WASM yang lebih kecil (walaupun dimampatkan) membawa kepada masa muat turun yang lebih pantas.
-
Penyahkodan: Lebih pantas daripada penghuraian JavaScript.
-
Menyusun & Mengoptimumkan: Lebih cepat disebabkan kedekatan WASM dengan kod mesin dan pra-pengoptimuman.
-
Mengoptimumkan semula: Tidak perlu kerana penaipan statik.
-
Pelaksanaan: Lebih pantas disebabkan kerumitan pengkompil yang lebih sedikit dan set arahan yang dioptimumkan.
-
Pengumpulan Sampah: Tidak hadir, kerana pengurusan memori adalah manual.
Kesimpulannya, WebAssembly sering mengatasi JavaScript dalam prestasi kerana model pelaksanaan yang diperkemas, penaipan statik dan proses penyusunan yang dioptimumkan.
Atas ialah kandungan terperinci Mengapa WebAssembly lebih pantas daripada JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!