Wat is WebAssembly (Wasm)? Uitleg over WebAssembly

Home Woordenlijst Wat is WebAssembly (Wasm)? Uitleg over WebAssembly

WebAssembly (afgekort Wasm) is een compact binair formaat om code op bijna-native snelheid te draaien, in de browser en daarbuiten. In plaats van alles in JavaScript te schrijven, kunnen ontwikkelaars code in talen als Rust, C, C++, Go of C# compileren naar WebAssembly en die veilig in een webpagina draaien. WebAssembly is sinds 2019 een officiële W3C-standaard en wordt door alle grote browsers ondersteund.

Hoe werkt WebAssembly?

  • Compilatie: broncode wordt gecompileerd tot een .wasm-module, een compact binair formaat dat snel laadt en start.
  • Sandbox: de module draait in een afgeschermde omgeving en kan alleen gebruiken wat de host (de browser of runtime) expliciet beschikbaar stelt.
  • Samen met JavaScript: in de browser laadt JavaScript de module en roept de functies aan; WebAssembly doet het zware rekenwerk, JavaScript de pagina en de DOM.
  • Overdraagbaar: dezelfde module draait op elk besturingssysteem en elke processor met een WebAssembly-runtime.

Waarvoor wordt WebAssembly gebruikt?

In de browser maakt WebAssembly toepassingen mogelijk die in JavaScript te traag zouden zijn: ontwerptools zoals Figma, Photoshop en AutoCAD op het web, video- en audiobewerking, 3D en games, CAD, data-analyse, versleuteling, en bestaande C++- of Rust-libraries in een webapp. Buiten de browser wordt WebAssembly gebruikt voor edge computing (bijvoorbeeld Cloudflare Workers en Fastly), veilige pluginsystemen waarin klanten eigen code binnen een platform draaien, en smart contracts op sommige blockchains. De standaard WASI geeft WebAssembly buiten de browser gecontroleerd toegang tot bestanden, netwerk en andere systeemfuncties.

WebAssembly of JavaScript?

WebAssembly vervangt JavaScript niet; ze vullen elkaar aan. JavaScript blijft de beste keuze voor gebruikersinterfaces en de meeste weblogica. WebAssembly wint bij rekenintensief werk, voorspelbare prestaties en hergebruik van code in andere talen. Aanroepen tussen JavaScript en WebAssembly kosten wat overhead, dus de grootste winst zit in het in één keer overdragen van grotere stukken werk.

Aandachtspunten

WebAssembly-modules kunnen groot worden als ze een complete runtime meenemen, zoals bij Go of C#; Rust en C leveren kleine modules op. Debuggen is lastiger dan bij gewone JavaScript, en directe toegang tot de DOM loopt nog steeds via JavaScript. Voor veel webapps is goed geoptimaliseerde JavaScript snel genoeg; WebAssembly loont waar prestaties of hergebruik van code echt tellen. Zie onze WebAssembly ontwikkeling en Rust ontwikkeling.

Veelgestelde vragen over WebAssembly

Is WebAssembly sneller dan JavaScript?

Bij rekenintensieve taken meestal wel, vaak aanzienlijk. Bij gewone weblogica en DOM-werk is het verschil klein of is JavaScript even snel.

Welke talen compileren naar WebAssembly?

Rust, C en C++ hebben de meest volwassen ondersteuning. Ook Go, C# (via Blazor), Kotlin, Swift, Zig en AssemblyScript kunnen naar WebAssembly compileren.

Is WebAssembly veilig?

WebAssembly draait in een sandbox met dezelfde beveiligingsregels als JavaScript in de browser. Het kan alleen de functies gebruiken die de host expliciet beschikbaar stelt.

Kan WebAssembly buiten de browser draaien?

Ja. Runtimes zoals Wasmtime en Wasmer, edgeplatforms en pluginsystemen draaien WebAssembly op servers en apparaten, met WASI voor toegang tot het systeem.