Skip to main content

Command Palette

Search for a command to run...

Perbedaan antara WASM dan Native Binding (C++)

Updated
4 min read
Perbedaan antara WASM dan Native Binding (C++)
A

I am an enthusiastic researcher and developer with a passion for using technology to innovate in business and education.

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:

CaraBahasa komunikasiPerformaPortabilitas
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-node

  • sharp (image processing)

  • sqlite3

  • bcrypt


🌍 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

AspekNative Binding (C++)WebAssembly (WASM)
Lokasi eksekusiServer / OS langsungBrowser / runtime universal
Performa⚡ Tercepat (native CPU)⚡ Cepat tapi 10–30% lebih lambat
KeamananBisa akses file system, jaringan, dll.Sandbox, aman dari OS
PortabilitasTergantung OS (harus compile ulang)Portabel ke mana saja
DistribusiButuh binary .node atau .dllCukup kirim file .wasm
Akses GPUBisa (CUDA, Metal, dll.)Terbatas (via WebGPU/WebGL)
Contoh runtimeNode.js, Bun, Python bindingsBrowser, Node, Deno, Bun
Cocok untukBackend AI, server processingFrontend inference, sandboxed apps

🚀 4. Studi Kasus: TensorFlow.js

TensorFlow.js punya dua mode utama:

ModeBackendTeknologiKelebihan
Browser Mode@tensorflow/tfjsWebGL / WASMBisa jalan tanpa server
Server Mode@tensorflow/tfjs-nodeNative 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

TujuanPilihan TepatAlasan
Aplikasi web interaktifWASMPortabel & ringan
Backend AI serverNative C++Akses penuh ke hardware
Edge device (IoT, mini AI)WASMAman & lintas platform
Training model besarNative 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.”

More from this blog

F

Finlup ID | Sharing dunia teknologi dan coding

206 posts

Membedah Tren dan Teknologi yang Mengubah Dunia.