Perbedaan antara WASM dan Native Binding (C++)

kunci untuk mengerti mengapa TensorFlow.js bisa jalan di browser, tapi juga bisa jauh lebih cepat di Node.js.
Kita akan bahas dengan analogi sederhana dulu, baru lanjut ke teknis 👇
🧩 Analogi Sederhana
Bayangkan kamu punya otot (CPU/GPU) dan otak (JavaScript):
JavaScript itu otak yang pintar tapi pelan (interpreted, garbage-collected).
Otot bisa disuruh kerja cepat kalau kamu bisa “berbicara” dalam bahasa mesin mereka.
Nah, untuk berkomunikasi dengan otot ini, ada dua cara:
| Cara | Bahasa komunikasi | Performa | Portabilitas |
| Native Binding (C++) | Bahasa asli mesin (binary native) | ⚡ Sangat cepat | ⚠️ Terikat OS & arsitektur |
| WebAssembly (WASM) | Bahasa mesin universal (virtual) | ⚡ Cepat tapi di bawah native | ✅ Bisa jalan di mana saja (browser, server, mobile) |
⚙️ 1. Apa Itu Native Binding (C++)
Native Binding (C++) artinya kita menghubungkan kode JavaScript langsung dengan library native (biasanya C atau C++).
Jadi JavaScript “memanggil” fungsi yang sebenarnya berjalan di level sistem operasi.
🔧 Contohnya:
// C++
double multiply(double a, double b) {
return a * b;
}
JavaScript memanggilnya melalui binding:
const addon = require('./binding.node');
console.log(addon.multiply(5, 10)); // 50
📌 Ciri-ciri:
Berjalan langsung di CPU (native binary).
Harus dikompilasi untuk sistem operasi tertentu (Windows, Linux, macOS).
Performa maksimal (mendekati C++ murni).
Tidak bisa dijalankan di browser tanpa server.
🧠 Contoh library yang pakai native binding:
@tensorflow/tfjs-nodesharp(image processing)sqlite3bcrypt
🌍 2. Apa Itu WebAssembly (WASM)
WebAssembly (WASM) adalah format biner lintas platform yang bisa dijalankan oleh browser atau runtime mana pun yang mendukung mesin WASM.
WASM dibuat agar kode C, C++, Rust, dll. bisa dijalankan di browser tanpa perlu akses langsung ke OS.
🔧 Contoh (konsepnya):
// C
int add(int a, int b) { return a + b; }
Dikompilasi menjadi .wasm, lalu dijalankan di JavaScript:
const wasm = await WebAssembly.instantiateStreaming(fetch('add.wasm'));
console.log(wasm.instance.exports.add(5, 7)); // 12
📌 Ciri-ciri:
Tidak terikat sistem operasi atau CPU tertentu.
Aman, sandboxed (tidak bisa mengakses file system langsung).
Bisa jalan di browser, Node.js, Deno, Bun.
Biasanya lebih lambat sedikit dibanding native C++ karena dijalankan lewat virtual machine (WASM VM).
🧠 Contoh library berbasis WASM:
@tensorflow/tfjs(browser mode → backend WebGL/WASM)wasm-vips(image processing di browser)ffmpeg.wasm(video encoder di browser)
⚖️ 3. Perbandingan Langsung
| Aspek | Native Binding (C++) | WebAssembly (WASM) |
| Lokasi eksekusi | Server / OS langsung | Browser / runtime universal |
| Performa | ⚡ Tercepat (native CPU) | ⚡ Cepat tapi 10–30% lebih lambat |
| Keamanan | Bisa akses file system, jaringan, dll. | Sandbox, aman dari OS |
| Portabilitas | Tergantung OS (harus compile ulang) | Portabel ke mana saja |
| Distribusi | Butuh binary .node atau .dll | Cukup kirim file .wasm |
| Akses GPU | Bisa (CUDA, Metal, dll.) | Terbatas (via WebGPU/WebGL) |
| Contoh runtime | Node.js, Bun, Python bindings | Browser, Node, Deno, Bun |
| Cocok untuk | Backend AI, server processing | Frontend inference, sandboxed apps |
🚀 4. Studi Kasus: TensorFlow.js
TensorFlow.js punya dua mode utama:
| Mode | Backend | Teknologi | Kelebihan |
| Browser Mode | @tensorflow/tfjs | WebGL / WASM | Bisa jalan tanpa server |
| Server Mode | @tensorflow/tfjs-node | Native Binding (C++) | Performa setara TensorFlow Python |
🔹 Jadi:
Kalau kamu mau model AI langsung di browser → pakai WASM (portabel, aman).
Kalau kamu mau AI di server untuk API inference cepat → pakai C++ Native Binding.
🧭 5. Kesimpulan
| Tujuan | Pilihan Tepat | Alasan |
| Aplikasi web interaktif | WASM | Portabel & ringan |
| Backend AI server | Native C++ | Akses penuh ke hardware |
| Edge device (IoT, mini AI) | WASM | Aman & lintas platform |
| Training model besar | Native C++ | Butuh GPU & performa tinggi |
📘 Ringkasan
WASM → Mesin virtual lintas platform, sandboxed, cocok untuk browser.
Native Binding (C++) → Akses langsung ke sistem, super cepat, tapi tergantung OS.
Keduanya bisa berjalan di Node.js/Bun, tergantung use case.
TensorFlow.js memanfaatkan WASM di browser dan C++ native binding di server.
Kalimat kuncinya:
“WASM adalah jembatan lintas dunia, sedangkan Native Binding adalah jalan tol ke performa puncak.”





