𝗞𝗲𝗹𝗮𝗵𝗶𝗿𝗮𝗻 𝗱𝗮𝗻 𝗞𝗲𝗺𝗮𝘁𝗶𝗮𝗻 𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁
JavaScript berjalan di dalam pelayar dengan keistimewaan yang sangat terhad. Walaupun begitu, ia menjalankan pelayan, alatan binaan, dan juga pangkalan data. Ini bukanlah satu rancangan. Ia merupakan siri tampalan yang dibina berasaskan keputusan dari tahun 1995.
Pada tahun 2014, Gary Bernhardt menyampaikan satu ceramah bertajuk "The Birth and Death of JavaScript." Ramai orang melihatnya sebagai ramalan yang gagal. Saya melihatnya sebagai alat diagnostik untuk geseran seni bina.
Bernhardt menghuraikan satu laluan yang ironik. JavaScript bermula sebagai bahasa mainan. Ia terselamat kerana ia merupakan satu-satunya bahasa di dalam pelayar. Monopoli ini menjadikannya bahasa yang paling banyak dilaksanakan di Bumi, walaupun ia bukan pilihan teknikal yang terbaik.
Ketegangan terasnya adalah mudah. Pelayar perlu menjalankan kod dengan selamat dan pantas. Kedua-dua matlamat ini sering bercanggah.
Pada tahun 2014, ramalannya adalah WebAssembly akan menggantikan JavaScript. Perkara itu tidak berlaku. WebAssembly adalah stabil dan berguna untuk perkara seperti Figma atau Google Earth. Walau bagaimanapun, ia tidak menggantikan JavaScript sebagai bahasa aplikasi.
Sebaliknya, JavaScript telah bermutasi. TypeScript, bundler, dan runtime baharu seperti Deno atau Bun adalah semua percubaan untuk membaiki geseran yang dikenal pasti oleh Bernhardt.
Jangan gunakan ceramah ini untuk mengelak daripada mempelajari JavaScript. Jangan gunakannya untuk mewajarkan peralihan ke WebAssembly sebelum anda menghadapi masalah prestasi yang sebenar.
Gunakan ia untuk bertanyakan soalan-soalan ini tentang stack anda:
• Adakah saya menggunakan alatan ini kerana ia adalah penyelesaian terbaik untuk masalah ini? • Adakah saya menggunakannya kerana ia adalah satu-satunya perkara yang berfungsi dalam konteks ini? • Adakah kerumitan alatan saya menyelesaikan masalah sebenar atau sekadar memindahkannya ke tempat lain? • Jika saya bermula dari awal hari ini, adakah saya akan memilih ini?
Jika anda menggunakan TypeScript pada pelayan, anda mendapat keselamatan jenis tetapi menambah beban kompilasi. Jika anda menggunakan Next.js, anda mendapat ciri-ciri tambahan tetapi menambah kerumitan caching. Ini adalah pertukaran yang nyata.
Kesilapan yang paling biasa adalah menyalahkan bahasa tersebut sedangkan masalah sebenarnya adalah penggunaan yang lemah. Jika anda menulis kod sinkronus yang berat yang menyekat event loop, masalahnya adalah anda, bukan JavaScript.
Berhenti mencari pengganti ajaib. Mula mengukur titik kesesakan sebenar anda.