WebAssembly: Arti, Keuntungan, Kasus Penggunaan & lainnya
Diterbitkan: 2022-10-12WebAssembly atau Wasm adalah format kode biner untuk membuat program yang dapat dijalankan pada arsitektur komputer apa pun.
Sistem ini terdiri dari mesin virtual dan kompiler yang menerjemahkan kode komputer dari bahasa pemrograman, seperti C atau C++ ke dalam format .wat dan biner yang dapat dibaca manusia.
Tujuan awal WebAssembly adalah untuk memungkinkan pemrogram mengembangkan aplikasi berkinerja tinggi untuk halaman web dengan mengaktifkan kecepatan eksekusi yang mendekati asli di dalam browser. Tetapi teknologi sekarang tampaknya berkembang di luar browser dan ke cloud.
Panduan ini menunjukkan semua yang perlu Anda ketahui tentang teknologi yang berkembang ini, kekuatan dan kelemahannya, serta potensi masa depannya.
Daftar isi
Apa itu WebAssembly?
WebAssembly adalah format kode biner yang berjalan pada mesin virtual dan bahasa yang berbeda dapat dikompilasi. Ini dirancang untuk portabel dan dapat berjalan di browser web atau sebagai aplikasi server.
Pertama kali dirilis pada tahun 2017, WebAssembly adalah rekomendasi W3C sejak 2019 dan dikelola oleh banyak kontributor, termasuk Mozilla, Google, Microsoft, Red Hat, dan banyak lagi.
Tujuan awalnya adalah untuk mengembangkan kecepatan eksekusi yang mendekati asli seperti yang akan Anda temukan dengan aplikasi C/C++ di dalam browser. Ini juga dimaksudkan sebagai standar web yang aman, standar terbuka, dapat di-debug, dan tanpa versi yang kompatibel dengan versi sebelumnya dan sesuai dengan JavaScript.
Bagaimana Cara Kerja WebAssembly?
WebAssembly dirancang sebagai mesin runtime, seperti Java atau JavaScript, yang dapat disematkan di lingkungan browser atau server untuk menjalankan kode komputer yang dikompilasi dalam format teks biner .wasm atau .wat.
Untuk menulis kode untuk eksekusi WebAssembly, pengembang menulis program dalam salah satu dari banyak bahasa yang didukung. Kemudian kompilasi menggunakan kompiler WebAssembly baik AOT (Ahead of Time) atau JIT (tepat waktu).
Kode ini dapat melakukan sebagian besar pekerjaan di lingkungan eksekusi, tetapi tidak dapat mengakses atau memodifikasi objek DOM browser. Interaksi semacam itu harus melewati JavaScript.
Cara Membuat Contoh Aplikasi WebAssembly
Membuat aplikasi Wasm sederhana untuk browser web dimungkinkan hanya dengan beberapa langkah seperti yang Anda lihat di bawah ini:
- Unduh dan instal Emscripten SDK.
- Tulis contoh kode helloworld.c Anda atau lakukan di C++/Rust jika Anda mau.
- Jalankan emcc helloworld.c -s WASM=1 -s helloworld.html di terminal untuk mengkompilasi kode ke WebAssembly dengan Emscripten. Ini akan membuat file biner Wasm, HTML, dan JavaScript yang Anda butuhkan (kode lem).
- Sajikan halaman helloworld.html melalui browser web Anda.
Keuntungan dari WebAssembly
Ada banyak alasan untuk mengadopsi WebAssembly dan teknologi terkait, antara lain:
- Performa Near-Native – WebAssembly memiliki desain level rendah yang menawarkan performa yang mirip dengan bahasa level rendah seperti C dan C++.
- Keamanan – Sistem dirancang agar aman dengan mengisolasinya di lingkungan virtual dengan akses sistem terbatas.
- Standar Terbuka – Banyak organisasi dan individu berkontribusi pada WebAssembly dan ini merupakan rekomendasi resmi W3C.
- Ringan – WebAssembly mengkompilasi ke dalam kode biner untuk dieksekusi di mesin virtual. Kode ini portabel dan tidak memerlukan atau datang dengan file sistem.
- Dukungan Multi-bahasa – Lebih dari 50 bahasa dapat dikompilasi ke dalam WebAssembly.
- Platform Independen – Mesin virtual WebAssembly dirancang untuk setiap arsitektur untuk menghadirkan lingkungan runtime yang sama. Yang harus dilakukan pengembang hanyalah menulis kode untuk WebAssembly.
Keterbatasan WebAssembly
- Pekerjaan dalam proses – Standar masih dalam pengembangan dan oleh karena itu banyak fitur dan peningkatan yang akan datang.
- Tidak ada pengumpulan sampah – WebAssembly masih kekurangan pengumpulan sampah, meskipun mungkin akan segera diimplementasikan.
- Tidak ada akses DOM – Anda tidak dapat mengakses DOM browser web langsung dari WebAssembly, Anda harus melalui JavaScript.
WebAssembly Vs Java
Java adalah semacam implementasi paling awal dari WebAssembly. Itu dirancang sebagai bahasa tulis-sekali, jalankan-di mana saja, tetapi mengembangkan banyak masalah di sepanjang jalan.
Sama seperti Java, WebAssembly menggunakan RE (Runtime Environment) untuk mengeksekusi kodenya, tetapi tidak seperti Java, Anda dapat menulis WebAssembly dalam bahasa pilihan Anda.
WebAssembly Vs JavaScript
WebAssembly dijalankan di browser atau lingkungan host lainnya, seperti JavaScript. Namun, ketika JavaScript dikirimkan ke lingkungan eksekusi dalam format teks dan dikompilasi tepat pada waktunya, WebAssembly memiliki format teks dan biner.

Di dalam browser web, JavaScript memiliki akses ke DOM, sedangkan WebAssembly tidak. Namun, dalam hal kecepatan eksekusi, WebAssembly mengalahkan JavaScript, dengan kecepatan eksekusi kode yang hampir asli.
Kecepatan adalah tempat WebAssembly bersinar dan alasan mengapa ini ideal untuk banyak kegunaan. Anda dapat memuat WebAssembly ke dalam browser menggunakan JavaScript dan kedua kode tersebut dapat berjalan bersama dan berbagi sumber daya.
WebAssembly Vs Docker Vs Kubernetes
Docker dan Kubernetes adalah dua teknologi populer yang mendukung komputasi awan. Docker adalah teknologi wadah yang memungkinkan pengembang untuk mengemas aplikasi dengan semua dependensi sistemnya ke dalam satu paket. Ini memudahkan penerapan aplikasi di lingkungan cloud apa pun dalam hitungan detik atau kurang.
Kubernetes, di sisi lain, adalah sistem sumber terbuka untuk mengelola dan menyebarkan aplikasi kemas seperti Docker, CRI-O, containerd, dan implementasi CRI (Container Runtime Interface) Kubernetes. Kubernetes juga memudahkan untuk menskalakan penerapan cloud di beberapa server atau mesin virtual.
Dari sudut pandang ini, WebAssembly lebih mirip dengan Docker dan dapat dibuat untuk dijalankan sebagai aplikasi cloud kemas menggunakan Kubernetes. Ini juga menawarkan banyak keunggulan dibandingkan Docker, tetapi mungkin tidak akan menggantikannya.
Di Luar Peramban
Pada awalnya, ada web server. Anda harus mendedikasikan mesin lengkap sebagai server. Lalu, ada mesin virtual, atau VM, yang memungkinkan server berjalan hanya pada satu atau lebih utas CPU. Namun, Anda harus memiliki VM khusus.
Komputasi awan memungkinkan untuk meluncurkan dan menjalankan server hanya bila diperlukan dengan menampung aplikasi. Hal ini menyebabkan pengurangan biaya, karena Anda hanya perlu membayar untuk apa yang Anda gunakan – tidak ada lagi mesin khusus. Tapi masih ada beberapa masalah.
Pertama, file buruh pelabuhan bisa berukuran beberapa Gigabytes, dan ini berarti penundaan kecil dalam startup dan masalah manajemen lainnya. Namun, file Wasm yang serupa hanya berukuran beberapa MB karena merupakan biner yang telah dikompilasi sebelumnya. Ini memberikan waktu startup yang jauh lebih cepat daripada Docker, sempurna untuk aplikasi kritis waktu tertentu.
Kedua, desain WebAssembly berarti pengembang tidak harus mengelola dan menetapkan sumber daya sistem, ia cukup langsung ke intinya menggunakan bahasa pemrograman pilihannya.
Fitur-fitur ini membuat WebAssembly ideal untuk menjalankan layanan mikro cloud, meskipun aplikasi Docker masih lebih disukai untuk aplikasi yang memerlukan kontrol lebih besar atas lingkungan operasi dan sistem file.
Untuk informasi lebih lanjut, proyek seperti WasmCloud dan WasmEdge sedang mengembangkan WebAssembly menjadi platform komputasi kaleng yang layak.
Kasus Penggunaan Wasm
Ada banyak kasus penggunaan untuk WebAssembly, mengingat sifatnya yang khas. Mereka dapat dibagi menjadi tiga kelompok besar; dalam-browser, di luar-browser, dan setup hybrid.
Jenis dalam browser cukup jelas dan di luar browser sebagian besar mengacu pada server, IoT, dan penyebaran cloud, sedangkan hibrida mengacu pada campuran keduanya.
Berikut ini adalah kasus penggunaan di mana Wasm dapat unggul:
- Kode performa tinggi yang sudah ada – Kode lama namun luar biasa yang dapat Anda port ke WebAssembly.
- Kode performa tinggi baru – Kode yang harus Anda rancang dan implementasikan dari awal.
- Memindahkan aplikasi desktop ke web – Ini dapat membuka generasi baru solusi desktop berbasis web, seperti pengeditan video berbasis web.
- Komputasi awan – Berjalan bersama Docker dan Kubernetes untuk peluang baru.
Berikut ini adalah tampilan aplikasi dan skenario spesifik di mana Wasm dapat unggul:
- Pengeditan video & gambar
- Desain permainan
- aplikasi AI
- Aplikasi realitas virtual & augmented
- Aplikasi musik
- Aplikasi P2P
- Aplikasi sisi server
- Komputasi awan/kluster
- Desain dengan bantuan komputer
- Simulasi platform OS
- Enkripsi
- Server web lokal
- Aplikasi desktop jarak jauh
- Visualisasi ilmiah
- Aplikasi asli hibrida di ponsel cerdas
- Pada perangkat IoT
Daftar Bahasa & Kerangka Kerja yang Didukung
Lebih dari 50 bahasa dikompilasi ke WebAssembly, dan berikut adalah beberapa yang paling populer:
- C
- C++
- R
- Rubi
- Cepat
- Pergi
- Kotlin
- Karat
- PHP
- Blazor – Kerangka kerja untuk pengembang .NET.
- JwebAssembly – Kompiler untuk bytecode Java dan bahasa terkait seperti JRuby, Jython, Groovy, Scala, dan Kotlin.
- Yew – Kerangka kerja Rust untuk membuat aplikasi web multi-utas menggunakan WebAssembly.
- AssemblyScript – Bahasa yang dirancang khusus untuk membuat kode WebAssembly.
- Grain – Bahasa fungsional yang diketik dengan kuat.
- Motoko
Anda dapat menemukan lebih banyak bahasa di sini.
Daftar Runtime & Alat WebAssembly
- Semua browser utama memiliki dukungan Wasm
- Pyodide – Python runtime di browser dengan tumpukan ilmiah Python, termasuk Pandas, NumPy, SciPy.
- wamr
- wagi – Untuk layanan mikro dan aplikasi web
- Wasi – Antarmuka sistem modular
- WasmTime – Waktu proses WebAssembly yang cepat dan aman.
- Wasmer
- Lucet
- wasmCloud – Lingkungan cloud
- Krustlet – Kubernetes kublete untuk menjalankan Wasm, ditulis dalam Rust.
- WasmEdge – Lingkungan runtime cloud dan edge
Kesimpulan
Kami telah mencapai akhir perjalanan kami ke WebAssembly dan apa yang dimilikinya untuk komputasi. Dan seperti yang Anda lihat, itu menjanjikan banyak hal.
Ini masih dalam proses, tetapi dalam pengembangan konstan. Dan jika Anda tertarik, Anda dapat menemukan informasi lebih lanjut di sini, di sini, dan di sini.