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.