Mengenai menterjemah kod ke dalam kod mesin, terdapat dua pendekatan utama: jurubahasa dan penyusun. JavaScript sering dirujuk sebagai bahasa yang ditafsirkan, tetapi itu tidak sepenuhnya tepat dan saya akan menerangkan sebabnya.
Jurubahasa lwn. Penyusun
Jurubahasa menterjemah kod baris demi baris, yang menjadikannya hebat untuk menjalankan kod dengan cepat. Ini adalah cara yang pantas untuk memulakan pelaksanaan, tetapi terdapat kelemahan - ia tidak mengoptimumkan tugasan berulang. Contohnya, jika kod anda mempunyai gelung yang mengulangi hasil yang sama, jurubahasa akan memprosesnya setiap kali tanpa sebarang pengoptimuman, memperlahankan perkara.
Sebaliknya, pengkompil mengambil keseluruhan kod sekali gus dan menterjemahkannya ke dalam kod mesin. Proses ini mengambil masa yang lebih lama pada mulanya, tetapi selepas kompilasi awal, ia berjalan lebih cepat. Ini kerana pengkompil boleh mengoptimumkan tugasan berulang, seperti gelung, menjadikan kod lebih cekap.
Masukkan JIT (Just-In-Time) Compiler
Pada akhir 2000-an, jurutera melihat kekuatan kedua-dua jurubahasa dan penyusun dan memutuskan untuk mencipta sesuatu yang lebih baik — pengkompil JIT (Just-In-Time). Pendekatan hibrid ini menggabungkan yang terbaik dari kedua-dua dunia.
Begini cara ia berfungsi:
Apabila anda memberikan fail JavaScript kepada penyemak imbas, kod itu melalui penghurai, yang menukarnya menjadi Pokok Sintaks Abstrak (AST).
Pada ketika ini, ada keputusan untuk dibuat:
Jika kod tidak memerlukan pengoptimuman, ia pergi terus kepada penterjemah, yang menterjemahkan kod kepada arahan yang boleh dibaca mesin (perduaan).
Jika kod tersebut mempunyai tugasan yang berulang atau rumit, pemprofil mengesan keperluan untuk pengoptimuman dan memajukannya kepada pengkompil, yang mengoptimumkan kod dan menterjemahkannya.
berikut ialah rajah terbaik untuk pemahaman yang lebih baik
Jadi, apabila seseorang bertanya, "Adakah JavaScript bahasa yang ditafsirkan?" anda boleh mengatakan "ya secara teknikal", tetapi ia bergantung pada pelaksanaannya. JavaScript menggunakan kedua-dua jurubahasa dan pengkompil, terima kasih kepada kompilasi JIT.
Berikut ialah contoh untuk menunjukkan perbezaan kecekapan antara jurubahasa dan pengkompil.
function calculateSum() { let sum = 0; for (let i = 0; i < 1000000; i++) { sum += i; } return sum; } console.log(calculateSum());
Dalam contoh ini, jurubahasa akan melalui setiap lelaran gelung satu demi satu. Pengkompil JIT, sebaliknya, akan menyedari bahawa gelung boleh dioptimumkan, mempercepatkan pelaksanaan selepas larian pertama.
Kesimpulan
Memahami cara JavaScript berfungsi di bawah hud membantu anda menghargai fleksibiliti dan kecekapannya. Gabungan penterjemah dan penyusun (terima kasih kepada JIT) membolehkan JavaScript berjalan dengan pantas dan cekap dalam penyemak imbas moden.
Lain kali seseorang memanggil JavaScript sebagai bahasa yang ditafsirkan, anda boleh menerangkan bahawa semasa ia bermula seperti itu, ia juga boleh berkelakuan seperti bahasa yang disusun apabila pengoptimuman diperlukan.
Atas ialah kandungan terperinci Mengapa JavaScript Bukan Sekadar Bahasa yang Ditafsirkan: Memahami Kompilasi JIT. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!