Pernah pake Figma di browser dan mikir "kok smooth banget kayak app desktop"? Atau Photoshop Web (yes, Photoshop sekarang ada di browser)? Atau game Doom 3 yang jalan di browser? Itu bukan JavaScript bisa secepat itu — itu **WebAssembly** (Wasm). Format binary yang jalan di browser dengan kecepatan mendekati native (10-20x lebih cepat dari JS untuk task berat). Bahasa C/C++/Rust/Go di-compile jadi `.wasm`, browser eksekusi langsung.
💡 Bukan replacement JavaScript. Wasm + JS = team. JS handle DOM/UI/network (yang dia kuat), Wasm handle compute-heavy (image processing, encryption, simulation). Photoshop Web = UI di JS, image engine di Wasm. Figma = sama. Pisah strategis.
WebAssembly (Wasm)
WebAssembly adalah format instruksi biner yang berjalan di browser dengan kecepatan mendekati native. Didesain sebagai target kompilasi untuk bahasa seperti C, C++, Rust, dan Go — bukan untuk ditulis manual.
Kenapa WebAssembly?
JavaScript hebat untuk interaktivitas web, tapi ada batasnya. Untuk task compute-intensive seperti image processing, game engine, video encoding, atau simulasi fisika — JavaScript bisa terasa lambat. WebAssembly hadir untuk mengisi gap ini.
- Near-native speed — Eksekusi 10-20x lebih cepat dari JavaScript untuk operasi CPU-intensive
- Compact binary format — File .wasm lebih kecil dari JavaScript equivalent, load lebih cepat
- Predictable performance — Tidak ada garbage collector pause, tidak ada JIT warmup
- Language agnostic — Tulis di Rust, C++, Go, lalu compile ke .wasm
Bagaimana Cara Kerjanya?
// Alur kerja WebAssembly:
Source Code (Rust/C++) → Compiler → .wasm binary → Browser VM
// Browser mendownload dan mengeksekusi .wasm
// mirip seperti mendownload dan menjalankan .js
// tapi dalam format binary yang sudah dioptimasi
Browser Support
- Chrome — Sejak versi 57 (Maret 2017)
- Firefox — Sejak versi 52 (Maret 2017)
- Safari — Sejak versi 11 (September 2017)
- Edge — Sejak versi 16 (Oktober 2017)
- Node.js — Sejak versi 8 (support V8 Wasm)
Artinya 95%+ browser global sudah support WebAssembly. Kamu bisa pakai dengan percaya diri di production.
Apa yang Bukan WebAssembly
- Bukan pengganti JavaScript — Wasm dan JS saling melengkapi, bukan bersaing
- Bukan bahasa pemrograman — Wasm adalah target kompilasi (seperti bytecode)
- Bukan akses DOM langsung — Wasm harus memanggil JavaScript untuk manipulasi DOM
- Bukan selalu lebih cepat — Untuk operasi ringan, overhead bridge JS↔Wasm bisa lebih mahal
🎭 Analogi sehari-hari
JavaScript = kompor gas rumahan. Cepat, fleksibel, cocok untuk hampir semua masakan. Wasm = oven pizza profesional. Spesialis untuk task berat (panas tinggi, hasil konsisten). Lo gak ganti kompor jadi oven — pake dua-duanya. Sayur sederhana di kompor, pizza serius di oven. Web modern: UI di JS, compute heavy di Wasm.
⚠️ Jebakan yang sering ditemui
- Pakai Wasm untuk semua = overhead bridge JS↔Wasm bisa lebih mahal dari benefit. Cuma untuk task berat
- Bundle size besar — `.wasm` bisa MB-an. Lazy load saat dibutuhkan
- Debug lebih susah dari JavaScript — tools masih berkembang
- Memory management manual di Wasm dari Rust/C++ — mudah leak kalau gak hati-hati
- "Wasm replace JS" = SALAH. Bukan kompetisi, kerja bareng
TL;DR: WebAssembly = format binary buat jalanin C/C++/Rust/Go di browser dengan near-native speed. 10-20x cepet dari JS untuk task compute-heavy (image, video, game, crypto, simulation). 95%+ browser support. Bukan replace JS — pasangan: JS handle UI/DOM, Wasm handle compute heavy. Dipake Figma, Photoshop Web, Google Earth, AutoCAD Web.