WebAssembly: betekenis, voordelen, gebruiksscenario's en meer

Meegesleept in de WebAssembly-hype, maar niet precies wat het is? Hier is het dieptepunt.

WebAssembly of Wasm is een binaire code-indeling voor het maken van programma's die op elke computerarchitectuur kunnen worden uitgevoerd.

Het systeem bestaat uit een virtuele machine en een compiler die computercode uit programmeertalen, zoals C of C++, vertaalt in de voor mensen leesbare .wat- en de binaire .wasm-formaten.

Het oorspronkelijke doel van WebAssembly was om programmeurs in staat te stellen hoogwaardige toepassingen voor webpagina's te ontwikkelen door bijna-native uitvoeringssnelheden in een browser mogelijk te maken. Maar de technologie lijkt zich nu verder te ontwikkelen dan browsers en naar de cloud.

Deze gids toont u alles wat u moet weten over deze evoluerende technologie, zijn sterke en zwakke punten, evenals zijn toekomstig potentieel.

Wat is WebAssembly?

WebAssembly is een binaire code-indeling die op een virtuele machine draait en waarnaar verschillende talen kunnen worden gecompileerd. Het is ontworpen om draagbaar te zijn en kan in een webbrowser of als servertoepassing worden uitgevoerd.

WebAssembly, voor het eerst uitgebracht in 2017, is sinds 3 een W2019C-aanbeveling en wordt onderhouden door tal van bijdragers, waaronder Mozilla, Google, Microsoft, Red Hat en nog veel meer.

Het oorspronkelijke doel was om bijna-native uitvoeringssnelheden te ontwikkelen zoals je zou vinden met C/C++-applicaties in de browser. Het is ook bedoeld als een veilige, open-standaard, foutopsporing en versieloze webstandaard die achterwaarts compatibel is en JavaScript-compatibel is.

Hoe werkt WebAssembly?

WebAssembly is ontworpen als een runtime-engine, zoals Java of JavaScript, die kan worden ingebed in een browser- of serveromgeving om computercode uit te voeren die is gecompileerd in de binaire .wasm- of .wat-tekstindelingen.

Om code voor WebAssembly-uitvoering te schrijven, schrijft de ontwikkelaar het programma in een van de vele ondersteunde talen. Compileer het vervolgens met behulp van een WebAssembly-compiler, ofwel AOT (Ahead of Time) of JIT (just in time).

Deze code kan het meeste werk doen in de uitvoeringsomgeving, maar kan de DOM-objecten van een browser niet openen of wijzigen. Elke dergelijke interactie moet via JavaScript gaan.

Een voorbeeld van een WebAssembly-toepassing maken

Het maken van een eenvoudige Wasm-applicatie voor de webbrowser is mogelijk met slechts een paar stappen, zoals u hieronder kunt zien:

  1. Download en installeer de Emscripten SDK.
  2. Schrijf uw voorbeeld hallowereld.c code of doe het in C++/Rust als je wilt.
  3. lopen emcc hallowereld.c -s WASM=1 -s hallowereld.html in een terminal om de code te compileren naar WebAssembly met Emscripten. Het zal de Wasm-binaire, HTML- en JavaScript-bestanden maken die u nodig hebt (lijmcode).
  4. Serveer de helloworld.html-pagina via uw webbrowser.

De voordelen van WebAssembly

Er zijn veel redenen om WebAssembly en de bijbehorende technologieën te gebruiken, waaronder:

  • Bijna-native prestaties – WebAssembly heeft zo'n low-level ontwerp dat het prestaties biedt die vergelijkbaar zijn met low-level talen zoals C en C++.
  • Beveiliging – Het systeem is ontworpen om veilig te zijn door het te isoleren in een virtuele omgeving met beperkte systeemtoegang.
  • Open Standaard – Veel organisaties en individuen dragen bij aan WebAssembly en het is een officiële W3C-aanbeveling.
  • Lichtgewicht – WebAssembly compileert in binaire code om te worden uitgevoerd in een virtuele machine. Deze code is overdraagbaar en heeft geen systeembestanden nodig of wordt meegeleverd.
  • Meertalige ondersteuning – Meer dan 50 talen kunnen worden gecompileerd in WebAssembly.
  • Platform onafhankelijk – De virtuele WebAssembly-machine is ontworpen voor elke architectuur om dezelfde runtime-omgeving te presenteren. Het enige dat een ontwikkelaar hoeft te doen, is code schrijven voor WebAssembly.

De beperkingen van WebAssembly

  • Lopende werkzaamheden - De standaard is nog in ontwikkeling en daarom moeten er nog veel functies en verbeteringen komen.
  • Geen vuilnisophaling - WebAssembly mist nog steeds het verzamelen van afval, hoewel het binnenkort mogelijk wordt geïmplementeerd.
  • Geen DOM-toegang – U kunt de DOM van een webbrowser niet rechtstreeks vanuit WebAssembly openen, u moet JavaScript gebruiken.

WebAssembly versus Java

Java is een soort van de vroegste implementatie van WebAssembly. Het is ontworpen als een eenmaal beschrijfbare taal die overal kan worden uitgevoerd, maar er zijn in de loop van de tijd veel problemen ontstaan.

Net als bij Java gebruikt WebAssembly een RE (Runtime Environment) om zijn code uit te voeren, maar in tegenstelling tot Java kunt u WebAssembly schrijven in de taal van uw keuze.

WebAssembly versus JavaScript

WebAssembly wordt uitgevoerd in de browser of een andere hostomgeving, net als JavaScript. Waar JavaScript echter in tekstindeling aan de uitvoeringsomgeving wordt geleverd en net op tijd wordt gecompileerd, heeft WebAssembly zowel tekst- als binaire indelingen.

Binnen webbrowsers heeft JavaScript toegang tot de DOM, terwijl WebAssembly dat niet heeft. Als het echter gaat om de uitvoeringssnelheid, verslaat WebAssembly JavaScript, met zijn bijna-native code-uitvoeringssnelheden.

Snelheid is waar WebAssembly uitblinkt en de reden dat het ideaal is voor zoveel toepassingen. U kunt WebAssembly in een browser laden met JavaScript en de twee codes kunnen samen worden uitgevoerd en bronnen delen.

WebAssembly versus Docker versus Kubernetes

Docker en Kubernetes zijn twee van de populaire technologieën die cloudcomputing mogelijk maken. Docker is een containertechnologie waarmee ontwikkelaars een applicatie met al zijn systeemafhankelijkheden in één pakket kunnen verpakken. Dit maakt het eenvoudig om de applicatie in een seconde of minder in elke cloudomgeving te implementeren.

Kubernetes daarentegen is een open-sourcesysteem voor het beheren en implementeren van gecontaineriseerde applicaties zoals Docker, CRI-O, containers en elke Kubernetes CRI-implementatie (Container Runtime Interface). Kubernetes maakt het ook eenvoudig om cloudimplementaties op meerdere servers of virtuele machines te schalen.

Vanuit dit oogpunt lijkt WebAssembly meer op Docker en kan het worden uitgevoerd als een gecontaineriseerde cloudtoepassing met Kubernetes. Het biedt ook veel voordelen ten opzichte van Docker, maar zal het waarschijnlijk niet vervangen.

Voorbij de browser

In het begin waren er webservers. Je moest een volledige machine inzetten als server. Toen waren er virtuele machines of VM's, waardoor een server op slechts een of meer CPU-threads kon draaien. Toch moest je een speciale VM hebben.

Cloud computing maakte het mogelijk om servers alleen te starten en uit te voeren wanneer dat nodig was door de applicaties te containeriseren. Dit leidde tot een verlaging van de kosten, omdat u alleen hoefde te betalen voor wat u gebruikt - geen speciale machines meer. Maar er zijn nog een paar problemen.

Ten eerste kunnen docker-bestanden enkele gigabytes groot zijn, en dit betekent een kleine vertraging bij het opstarten en andere beheerproblemen. Een soortgelijk Wasm-bestand kan echter maar een paar MB groot zijn omdat het een vooraf gecompileerd binair bestand is. Dit geeft het een veel snellere opstarttijd dan Docker, perfect voor bepaalde tijdkritische toepassingen.

Ten tweede betekent het ontwerp van WebAssembly dat de ontwikkelaar geen systeembronnen hoeft te beheren en toe te wijzen, hij kan eenvoudig ter zake komen met zijn programmeertaal naar keuze.

Deze functies maken WebAssembly ideaal voor het uitvoeren van cloud-microservices, hoewel Docker-applicaties nog steeds de voorkeur hebben voor applicaties die meer controle over de besturingsomgeving en het bestandssysteem vereisen.

Voor meer informatie, projecten zoals WasmCloud en WasmEdge ontwikkelen WebAssembly tot een levensvatbaar computerplatform.

Wasm-gebruikscasussen

Er zijn veel use-cases voor WebAssembly, gezien de bijzondere aard ervan. Ze kunnen worden onderverdeeld in drie grote groepen; in-browser, outside-the-browser en hybride opstellingen.

Het type in-browser spreekt voor zich en buiten de browser verwijst meestal naar server-, IoT- en cloudimplementaties, terwijl het hybride naar een combinatie van beide verwijst.

Hieronder volgt een overzicht van gebruikssituaties waarin Wasm kan uitblinken:

  • Reeds bestaande high-performance code – Oude maar geweldige code die je gewoon naar WebAssembly kunt porten.
  • Nieuwe krachtige code – Degene die je vanaf het begin moet ontwerpen en implementeren.
  • Desktop-applicaties overzetten naar het web – Dit zou een nieuw soort webgebaseerde desktopoplossingen kunnen openen, zoals: webgebaseerde videobewerking.
  • Cloud computing – Lopen naast Docker en Kubernetes voor nieuwe kansen.

Hieronder volgt een overzicht van specifieke toepassingen en scenario's waarin Wasm kan uitblinken:

  • Video- en beeldbewerking
  • Spel ontwerp
  • AI-toepassingen
  • Virtuele en augmented reality-toepassingen
  • Muziek toepassingen
  • P2P-toepassingen
  • Server-side toepassingen
  • Cloud-/clusterberekeningen
  • Computerondersteund ontwerp
  • OS-platformsimulatie
  • Encryptie
  • Lokale webserver
  • Extern bureaublad-toepassingen
  • Wetenschappelijke visualisaties
  • Hybride native apps op smartphones
  • Op IoT-apparaten

Lijst met ondersteunde talen en kaders

Meer dan 50 talen compileren naar WebAssembly, en hier zijn enkele van de meest populaire:

  • C
  • C + +
  • R
  • Robijn
  • Swift
  • Go
  • Kotlin
  • Roest
  • PHP
  • blazer – Een raamwerk voor .NET-ontwikkelaars.
  • JwebAssemblage - Compiler voor Java-bytecode en gerelateerde talen zoals JRuby, Jython, Groovy, Scala en Kotlin.
  • taxusboom – Een Rust-framework voor het maken van web-apps met meerdere threads met behulp van WebAssembly.
  • AssemblageScript – Een taal die speciaal is ontworpen om WebAssembly-code te maken.
  • Graan – Een sterk getypte functionele taal.
  • Motoko

U kunt meer talen vinden hier.

Lijst met WebAssembly-runtimes en -hulpmiddelen

  • Alle grote browsers hebben Wasm-ondersteuning
  • Pyodide - Python-runtime in de browser met de wetenschappelijke stapel van Python, inclusief Panda's, NumPy, SciPy.
  • wamr
  • gewicht – Voor microservices en webapps
  • Was ik – Modulaire systeeminterface
  • WasmTijd – Snelle en veilige WebAssembly-runtime.
  • Wasmer
  • Lucet
  • wasmCloud – Cloud omgeving
  • Krustlet – Kubernetes kublete voor het draaien van Wasm, geschreven in Rust.
  • WasmEdge – Cloud en edge runtime-omgeving

Conclusie

We zijn aan het einde gekomen van onze reis naar WebAssembly en wat het inhoudt voor computergebruik. En zoals je kunt zien, belooft het veel.

Het is nog steeds een work in progress, maar in constante ontwikkeling. En als u geïnteresseerd bent, kunt u meer informatie vinden hier, hier en hier.

Nnamdi Okeke

Nnamdi Okeke

Nnamdi Okeke is een computerliefhebber die graag een breed scala aan boeken leest. Hij heeft een voorkeur voor Linux boven Windows/Mac en gebruikt al jaren
Ubuntu sinds zijn begindagen. Je kunt hem op twitter vangen via bongotrax

Artikelen: 191

Technische spullen ontvangen

Tech trends, startup trends, reviews, online inkomsten, webtools en marketing een of twee keer per maand

Laat een reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd *