Jak WebAssembly funguje

Jak WebAssembly funguje?

WebAssembly je navržen jako cílový jazyk pro kompilaci. To znamená, že vývojáři píší kód ve vyšších programovacích jazycích (C, C++, Rust, Go atd.) a ten je následně zkompilován do WASM binárního formátu. Výsledný .wasm soubor pak lze spustit v libovolném prostředí s WASM runtime.

WASM používá virtuální stroj založený na zásobníku. Instrukce jsou jednoduché a přímočaré, což umožňuje rychlou interpretaci a kompilaci JIT. Každý WASM modul běží ve vlastním izolovaném paměťovém prostoru, což zajišťuje bezpečnost.

ASM.js vs WebAssembly

ASM.js byl předchůdce WebAssembly — podmnožina JavaScriptu navržená pro kompilaci C/C++ kódu. Zatímco ASM.js představoval významný pokrok, narážel na limity JavaScriptu. WebAssembly tyto limity překonává a nabízí výrazně lepší výkon, menší velikost souborů a širší podporu napříč prohlížeči.

Vlastnost ASM.js WebAssembly
Formát Textový (JavaScript) Binární (WASM)
Rychlost načítání Pomalé (parsování JS) Rychlé (binární formát)
Velikost souborů Velká Malá (komprimovaná)
Výkon ~50 % nativního ~80–100 % nativního
Podpora prohlížečů Pouze Firefox Všechny moderní
Typová kontrola Anotace v JavaScriptu Nativní typový systém
Vývojářské nástroje Omezené Rozsáhlé (debuggery, profiler)

Kompilační řetězec

Proces převodu zdrojového kódu do WASM se skládá z několika kroků:

  • Zdrojový kód (C, C++, Rust, Go) je přeložen pomocí kompilátoru (např. Emscripten, LLVM) do mezireprezentace
  • Mezireprezentace je následně převedena do WASM binárního formátu
  • Výsledný .wasm soubor je optimalizován a komprimován pro distribuci
  • Prohlížeč stáhne WASM modul, zvaliduje ho a zkompiluje JIT do nativního kódu
  • JavaScript může s WASM modulem komunikovat přes WASM API a sdílet paměť

Celý proces je transparentní a probíhá v řádu milisekund. Vývojář píše kód ve známém jazyce a výsledek běží v prohlížeči s nativním výkonem.