WebAssembly: Význam, výhody, případy použití a další
Chytil vás humbuk WebAssembly, ale nejste si přesně jisti, co to je? Tady je to dole.

WebAssembly nebo Wasm je formát binárního kódu pro vytváření programů, které lze spustit na libovolné architektuře počítače.
Systém se skládá z virtuálního stroje a kompilátoru, který překládá počítačový kód z programovacích jazyků, jako je C nebo C++, do formátu .wat čitelného pro člověka a binárního formátu .wasm.
Původním cílem WebAssembly bylo umožnit programátorům vyvíjet vysoce výkonné aplikace pro webové stránky tím, že umožní téměř nativní rychlosti spouštění v prohlížeči. Zdá se však, že tato technologie se nyní vyvíjí mimo prohlížeče a do cloudu.
Tato příručka vám ukáže vše, co potřebujete vědět o této vyvíjející se technologii, jejích silných a slabých stránkách a také o jejím budoucím potenciálu.
Co je WebAssembly?
WebAssembly je formát binárního kódu, který běží na virtuálním počítači a do kterého lze kompilovat různé jazyky. Je navržen jako přenosný a může běžet ve webovém prohlížeči nebo jako serverová aplikace.
WebAssembly, který byl poprvé vydán v roce 2017, je doporučením W3C od roku 2019 a je spravován mnoha přispěvateli, včetně Mozilly, Google, Microsoftu, Red Hatu a mnoha dalších.
Původním cílem bylo vyvinout téměř nativní rychlosti spouštění, jaké byste našli u aplikací C/C++ uvnitř prohlížeče. Má to být také bezpečný, otevřený standard, laditelný webový standard bez verze, který je zpětně kompatibilní a kompatibilní s JavaScriptem.
Jak WebAssembly funguje?
WebAssembly je navržen jako runtime modul, jako je Java nebo JavaScript, který lze zabudovat do prostředí prohlížeče nebo serveru a spouštět počítačový kód zkompilovaný v binárních textových formátech .wasm nebo .wat.
Chcete-li napsat kód pro provádění WebAssembly, vývojář napíše program v kterémkoli z mnoha podporovaných jazyků. Poté jej zkompilujte pomocí kompilátoru WebAssembly buď AOT (Ahead of Time) nebo JIT (just in time).
Tento kód může dělat většinu práce ve spouštěcím prostředí, ale nemůže přistupovat ani upravovat objekty DOM prohlížeče. Každá taková interakce musí projít JavaScriptem.
Jak vytvořit ukázkovou aplikaci WebAssembly
Vytvoření jednoduché aplikace Wasm pro webový prohlížeč je možné v několika krocích, jak můžete vidět níže:
- Stažení a instalace Emscripten SDK.
- Napište svůj vzorek helloworld.c kód nebo to udělejte v C++/Rust, pokud chcete.
- Běh emcc helloworld.c -s WASM=1 -s helloworld.html v terminálu ke kompilaci kódu do WebAssembly pomocí Emscripten. Vytvoří binární soubory Wasm, HTML a JavaScript, které potřebujete (kód lepidla).
- Obsluhujte stránku helloworld.html prostřednictvím svého webového prohlížeče.
Výhody WebAssembly
Existuje mnoho důvodů pro přijetí WebAssembly a souvisejících technologií, mezi které patří:
- Near-Native Performance – WebAssembly má tak nízkoúrovňový design, že nabízí výkon podobný nízkoúrovňovým jazykům, jako jsou C a C++.
- Bezpečnost – Systém je navržen tak, aby byl zabezpečený tím, že je izolován ve virtuálním prostředí s omezeným přístupem k systému.
- Otevřený standard – Do WebAssembly přispívá mnoho organizací a jednotlivců a je to oficiální doporučení W3C.
- Lehká váha – WebAssembly se zkompiluje do binárního kódu, který se má spustit na virtuálním počítači. Tento kód je přenosný a nepotřebuje ani není dodáván se systémovými soubory.
- Vícejazyčná podpora – Do WebAssembly lze zkompilovat více než 50 jazyků.
- Nezávislé na platformě – Virtuální stroj WebAssembly je navržen pro každou architekturu tak, aby představoval stejné běhové prostředí. Vše, co musí vývojář udělat, je napsat kód pro WebAssembly.
Omezení WebAssembly
- Práce probíhá – Standard je stále ve vývoji, a proto mnoho funkcí a vylepšení teprve přijde.
- Žádný svoz odpadu – WebAssembly stále postrádá shromažďování odpadků, i když může být brzy implementováno.
- Žádný DOM přístup – K DOM webového prohlížeče se nemůžete dostat přímo z WebAssembly, budete muset projít JavaScriptem.
WebAssembly vs Java
Java je jakousi nejstarší implementací WebAssembly. Byl navržen jako jazyk pro jednorázový zápis a spuštění kdekoli, ale během toho se objevilo mnoho problémů.
Stejně jako v případě Java používá WebAssembly ke spuštění svého kódu RE (Runtime Environment), ale na rozdíl od Java můžete WebAssembly psát v jazyce, který si zvolíte.
WebAssembly vs JavaScript
WebAssembly se spouští v prohlížeči nebo jiném hostitelském prostředí, stejně jako JavaScript. Avšak tam, kde je JavaScript dodáván do prováděcího prostředí v textovém formátu a je kompilován právě včas, WebAssembly má textový i binární formát.
Uvnitř webových prohlížečů má JavaScript přístup k DOM, zatímco WebAssembly ne. Pokud však jde o rychlost provádění, WebAssembly poráží JavaScript s rychlostí spouštění téměř nativního kódu.
Rychlost je místo, kde WebAssembly září a důvod, proč je ideální pro tolik použití. WebAssembly můžete načíst do prohlížeče pomocí JavaScriptu a oba kódy mohou běžet společně a sdílet prostředky.
WebAssembly vs Docker vs Kubernetes
Docker a Kubernetes jsou dvě z populárních technologií, které pohání cloud computing. Docker je kontejnerová technologie, která umožňuje vývojářům zabalit aplikaci se všemi jejími systémovými závislostmi do jediného balíčku. To usnadňuje nasazení aplikace v jakémkoli cloudovém prostředí během sekundy nebo méně.
Kubernetes je na druhé straně open-source systém pro správu a nasazení kontejnerizovaných aplikací, jako je Docker, CRI-O, kontejnery a jakákoli implementace Kubernetes CRI (Container Runtime Interface). Kubernetes také usnadňuje škálování cloudových nasazení na více serverů nebo virtuálních počítačů.
Z tohoto hlediska je WebAssembly podobnější Dockeru a lze jej spustit jako kontejnerovou cloudovou aplikaci pomocí Kubernetes. Oproti Dockeru nabízí také mnoho výhod, ale pravděpodobně jej nenahradí.
Beyond The Browser
Na začátku byly webové servery. Museli jste vyhradit celý stroj jako server. Pak tu byly virtuální stroje nebo virtuální počítače, které umožňovaly serveru běžet pouze na jednom nebo více vláknech CPU. Přesto jste museli mít vyhrazený VM.
Cloud computing umožnilo spouštět a provozovat servery pouze v případě potřeby kontejnerizací aplikací. To vedlo ke snížení nákladů, protože jste museli platit pouze za to, co používáte – žádné další specializované stroje. Stále však existuje několik problémů.
Za prvé, soubory dockeru mohou být velké několik gigabajtů, což znamená malé zpoždění při spouštění a další problémy se správou. Podobný soubor Wasm však může být velký jen několik MB, protože se jedná o předkompilovaný binární soubor. Díky tomu má mnohem rychlejší spouštění než Docker, což je ideální pro určité časově kritické aplikace.
Za druhé, design WebAssembly znamená, že vývojář nemusí spravovat a přidělovat systémové prostředky, může se jednoduše dostat k věci pomocí svého zvoleného programovacího jazyka.
Díky těmto funkcím je WebAssembly ideální pro provozování cloudových mikroslužeb, ačkoli aplikace Docker jsou stále vhodnější pro aplikace, které vyžadují větší kontrolu nad operačním prostředím a souborovým systémem.
Pro více informací, projekty jako WasmCloud si WasmEdge vyvíjí WebAssembly do životaschopné počítačové platformy.
Wasm Use Cases
Existuje mnoho případů použití pro WebAssembly, vzhledem k jeho zvláštní povaze. Lze je rozdělit do tří hlavních skupin; nastavení v prohlížeči, mimo prohlížeč a hybridní nastavení.
Typ v prohlížeči je samozřejmý a mimo prohlížeč se většinou týká nasazení serveru, internetu věcí a cloudu, zatímco hybridní se týká kombinace obou.
Následuje pohled na případy použití, ve kterých může Wasm excelovat:
- Již existující vysoce výkonný kód – Starý, ale úžasný kód, který můžete přenést do WebAssembly.
- Nový vysoce výkonný kód – Ty, které musíte navrhnout a implementovat od začátku.
- Portování desktopových aplikací na web – To by mohlo otevřít nový druh webových desktopových řešení, jako je např webový střih videa.
- Cloud computing – Běh společně s Dockerem a Kubernetes pro nové příležitosti.
Následuje pohled na konkrétní aplikace a scénáře, ve kterých může Wasm excelovat:
- Úprava videa a obrázků
- Návrh hry
- Aplikace AI
- Aplikace pro virtuální a rozšířenou realitu
- Hudební aplikace
- P2P aplikace
- Aplikace na straně serveru
- Cloudové/klastrové výpočty
- Počítačem podporovaný design
- Simulace platformy OS
- Šifrování
- Lokální webový server
- Aplikace vzdálené plochy
- Vědecké vizualizace
- Hybridní nativní aplikace na chytrých telefonech
- Na zařízeních IoT
Seznam podporovaných jazyků a rámců
Více než 50 jazyků se kompiluje do WebAssembly a zde jsou některé z nejpopulárnějších:
- C
- C + +
- R
- Rubín
- Rychlý
- Go
- Kotlin
- Rez
- PHP
- blejzr – Rámec pro vývojáře .NET.
- JwebAssembly – Kompilátor pro bytecode Java a příbuzné jazyky jako JRuby, Jython, Groovy, Scala a Kotlin.
- Tis – Rámec Rust pro vytváření vícevláknových webových aplikací pomocí WebAssembly.
- AssemblyScript – Jazyk speciálně navržený pro vytváření kódu WebAssembly.
- Zrní – Silně typovaný funkční jazyk.
- Motoko
Můžete najít více jazyků zde.
Seznam modulů a nástrojů WebAssembly
- Všechny hlavní prohlížeče mají podporu Wasm
- Pyodide – Runtime Pythonu v prohlížeči s vědeckým zásobníkem Pythonu, včetně Pandas, NumPy, SciPy.
- wamr
- hmotnost – Pro mikroslužby a webové aplikace
- Byl jsem – Modulární systémové rozhraní
- WasmTime – Rychlé a bezpečné běhové prostředí WebAssembly.
- Wasmer
- Lucet
- wasmCloud – Cloudové prostředí
- Krustlet – Kubernetes kublete pro běh Wasm, napsaný v Rustu.
- WasmEdge – Cloudové a okrajové běhové prostředí
Proč investovat do čističky vzduchu?
Došli jsme na konec naší cesty do WebAssembly a toho, co to znamená pro výpočetní techniku. A jak vidíte, je to hodně slibné.
Je to stále nedokončená práce, ale neustále se vyvíjí. A pokud vás to zajímá, najdete další informace zde, zde, a zde.





