Terdapat sejenis kesunyian yang pelik di dalam bilik yang penuh dengan pembangun yang sedang menunggu proses binaan (build) selesai. Mata melirik ke monitor kedua. Ibu jari menatal telefon. Seseorang bangun untuk mendapatkan kopi yang mereka sebenarnya tidak mahu pun. Jika anda pernah meluangkan masa dalam pangkalan kod JavaScript moden, anda pasti tahu jeda ini. Ia bukan sekadar waktu rehat. Ia adalah gangguan dalam aliran pemikiran anda.

Kita banyak bercakap tentang rangka kerja (framework). React, Vue, Svelte, dan apa sahaja yang bakal dilancarkan minggu depan sentiasa menarik perhatian. Konferensi habis terjual berdasarkan pengumuman rangka kerja. Hantaran blog mencerakinkan syntax sugar. Namun di sebalik semua kebisingan yang berorientasikan pengguna itu, landskap sedang berubah dengan cara yang akan benar-benar mengubah cara anda menulis kod. Revolusi ini bukan datang daripada rangka kerja frontend. Ia sedang berlaku pada lapisan tooling, dan ia sedang ditulis dalam Rust dan Go.

Selama bertahun-tahun, alatan JavaScript dibina menggunakan JavaScript. Itu masuk akal. Babel mengajar satu generasi cara menulis sintaks masa hadapan pada hari ini. Webpack membungkus kod terbahagi kami menjadi sesuatu yang boleh diproses oleh pelayar. ESLint mengesan pepijat sebelum kami melakukan commit. Alatan ini direka untuk web yang lebih kecil. Ia mengandaikan hanya beberapa ratus modul, bukan sepuluh ribu. Ia mengandaikan repositori tunggal, bukan monorepo di mana perubahan dalam pakej UI kongsi memberi kesan kepada berpuluh-puluh aplikasi.

Kemudian aplikasi mula berkembang. Pangkalan kod berkembang menjadi repositori yang sangat besar. Alatan pula kekal sama, dan latensi mula menyusup masuk. Hot reload yang dahulunya mengambil masa dua saat menjadi dua belas, kemudian tiga puluh saat. Menjalankan keseluruhan set ujian sebelum makan tengah hari menjadi satu fantasi. Linter tersangkut pada fail yang telah diperiksa beribu-ribu kali. Setiap kelewatan nampak kecil di atas kertas. Namun dalam praktiknya, jeda ini memecahkan tumpuan. Ia melatih anda untuk melakukan kerja secara berkelompok, untuk teragak-agak sebelum menyemak sama ada sesuatu pembaikan itu berjaya, dan untuk mengelakkan eksperimen kerana kos maklum balas yang terlalu tinggi.

Generasi alatan seterusnya menangani latensi tersebut dengan cara tidak lagi menghalang JavaScript.

Bilik Enjin Baharu

Lihat bagaimana tugasan khusus sedang diambil alih semula.

Transformasi dahulunya bermaksud Babel. Ia adalah pra-pemproses universal, menterjemah JSX dan cadangan peringkat-3 kepada ES5 biasa. Ia masih perisian yang mengagumkan, tetapi ia adalah JavaScript single-threaded yang mencerakinkan JavaScript. Masuklah OXC, satu rantaian alatan berasaskan Rust. Ia mengendalikan tugasan yang sama seperti Babel, tetapi penanda aras menunjukkan ia kira-kira 40 kali lebih pantas sambil menggunakan 70% kurang memori. Itu bukan sekadar penambahbaikan berperingkat. Itu adalah perbezaan antara alatan yang anda perasan sedang berfungsi dengan alatan yang anda terlupa ia sedang berjalan.

Pembungkusan (Bundling) adalah tempat di mana kesukaran paling dirasai. Webpack telah menjadi piawaian selama sedekad, tetapi struktur dalamannya dibina untuk skala yang berbeza. Turbopack, pengganti Rustnya, bukan sekadar menyusun semula kod dengan lebih pantas. Ia bergantung kepada memoization yang agresif untuk memahami dengan tepat apa yang berubah dan hanya membina semula bahagian tersebut. Dalam aplikasi yang besar, mengubah satu komponen sahaja tidak sepatutnya memakan masa untuk penelusuran graf sepenuhnya. Dengan Turbopack, proses binaan menjadi hampir serta-merta. Bar kemajuan hilang kerana tiada apa yang perlu ditunggu.

Pengujian (Testing) mempunyai beban tersendiri. Jest telah mentakrifkan semula pengujian JavaScript, namun dalam mod pemerhatian (watch mode), ia terasa seolah-olah ia sedang mempelajari semula pangkalan kod anda pada setiap tekanan kekunci. Vitest mengambil pendekatan seni bina yang berbeza. Kerana ia menggunakan semula graf modul Vite dan bukannya membina pokok kebergantungan sendiri dari awal, ia melaporkan kelajuan kira-kira 8.5 kali lebih pantas daripada Jest dalam mod pemerhatian. Kelebihannya di sini bukan sekadar kepantasan mentah. Ia adalah keselarasan. Pelari ujian (test runner) dan pelayan pembangunan (dev server) anda akhirnya selaras tentang rupa projek anda.

Pemeriksaan kod (Linting) mengalami beban tambahan yang serupa. Fleksibiliti ESLint adalah kelebihannya; peraturannya hanyalah fungsi JavaScript yang beroperasi pada AST. Fleksibiliti itu menelan kos kitaran pemprosesan. Oxlint, yang ditulis dalam Rust, mengecilkan skop kepada kes biasa dan bergerak sangat pantas. Ia berjalan antara 50 hingga 100 kali lebih pantas daripada ESLint. Kesan praktikalnya ialah pemeriksaan kod yang selesai sebelum animasi simpan editor anda selesai. Anda tidak lagi perlu bertoleransi dengan garisan beralun merah yang kekal selama beberapa saat walaupun anda telah pun membaiki isu tersebut.

Mungkin peralihan yang paling simbolik sedang berlaku dalam pemeriksaan jenis. Microsoft kini sedang menulis semula kompiler TypeScript dalam Go. Penanda aras awal sangat mengejutkan: VS Code dimuatkan kira-kira 8 kali lebih pantas dengan pelaksanaan baharu, dan pemeriksaan jenis itu sendiri adalah kira-kira 10 kali lebih pantas. Fikirkan apa maksudnya. TypeScript adalah kisah kejayaan JavaScript. Ia adalah bahasa yang dikompil kepada JavaScript, digunakan untuk melakukan pemeriksaan jenis pada ekosistem JavaScript, dan kini kompilernya sendiri beralih ke bahasa sistem asli kerana JavaScript tidak dapat memberikan prestasi yang diperlukan oleh ekosistem tersebut. Alat tersebut sedang memakan jejaknya sendiri demi kelajuan.

Semua ini tidak menggantikan React. Ia tidak membunuh Next.js atau menjadikan TypeScript usang. Rangka kerja (framework) masih menentukan model komponen dan penghalaan (routing) anda. Alat-alat baharu ini hanya menjadikan segala-galanya di bawah lebih pantas. Ia adalah jalan raya, bukan kereta.

Apabila Kelajuan Mengubah Tingkah Laku

Perbincangan tentang peralatan (tooling) sering terperangkap dalam carta penanda aras. Nombor mudah dibandingkan. Namun, impak sebenar terletak pada tingkah laku manusia.

Apabila maklum balas turun daripada saat kepada milisaat, anda bukan sekadar menyiapkan tugas dengan lebih pantas. Anda menyiapkannya dengan cara yang berbeza. Anda berhenti menimbun perubahan. Anda menulis satu baris kod, melihat hasilnya, dan membuat pelarasan. Anda menjalankan ujian kerana ia adalah serta-merta, bukan kerana permintaan tarik (pull request) anda memerlukannya. Anda mencuba penstrukturan semula (refactor) yang mungkin tidak berjaya kerana membatalkannya tidak menelan sebarang kos. Anda kekal fokus pada masalah tersebut daripada menunggu mesin membenarkan anda masuk semula.

Inilah yang dipanggil ahli psikologi sebagai flow. Ia memerlukan gelung yang rapat antara tindakan dan kesan. Seorang pemain gitar tidak dapat bermain jika amp melambatkan setiap nota. Seorang pelukis tidak dapat mencampur warna jika berus dikemas kini lewat setengah saat. Pembangun juga tidak berbeza. Latensi bukan sekadar gangguan. Ia adalah cukai terhadap pemikiran.

Oleh itu, peningkatan produktiviti bukan sekadar teknikal. Ia adalah satu tabiat. Alat yang pantas melatih anda untuk bereksperimen. Alat yang lambat melatih anda untuk teragak-agak. Dalam tempoh setahun, perbezaan ini akan terkumpul menjadi perisian yang jauh berbeza. Pasukan dengan maklum balas serta-merta akan melancarkan produk dengan lebih yakin. Mereka membahagikan kerja kepada bahagian yang lebih kecil kerana kos untuk mencuba adalah sifar. Semakan kod mereka menjadi lebih singkat kerana pepijat (bugs) dikesan pada saat itu juga, bukan dalam CI dua puluh minit kemudian.

Kerja yang Tidak Kelihatan

Inilah sebabnya tajuk berita sering mengelirukan. Rangka kerja mudah untuk ditulis. Ia mempunyai logo, API, dan drama Twitter. Infrastruktur direka untuk tidak kelihatan. Anda tidak bangun dengan perasaan teruja untuk mengkonfigurasi pembungkus (bundler). Anda mahu ia hilang. Tetapi "menghilang" adalah tepat apa yang dilakukan oleh infrastruktur yang baik. Ia memikul beban supaya lapisan yang kelihatan dapat kekal ringan.

Jika anda sedang mengetuai pasukan atau menyelenggara kod leg