ID.nl logo
Wat is WebAssembly en wat kun je er mee?
© PXimport
Huis

Wat is WebAssembly en wat kun je er mee?

WebAssembly klinkt hardcore, en dat is het ook. Een soort machinetaal voor high-performance webapps. Ondertussen wordt het ondersteund door alle grote browsers en is het gestandaardiseerd door het W3C. Wat is WebAssembly precies en waar wordt het in de praktijk voor gebruikt?

De voertaal voor webapps is javascript. Ondanks de succesvolle inspanningen van browsermakers om hun javascript-engines in elke versie weer wat efficiënter te maken, is dat voor veel toepassingen nog niet genoeg. Google kwam dan in 2011 met zijn Native Client (NaCl) om native processorcode in een webapp te draaien.

Mozilla wilde de platformonafhankelijkheid van javascript echter niet verlaten, en begon daarom in 2013 aan een andere aanpak: asm.js, een subset van javascript die browsers heel efficiënt kunnen uitvoeren. Je compileert dan een webapp uit een taal zoals C naar asm.js, en je browser voert dit dan als gewone javascript uit.

Het voordeel van asm.js is dat het gewoon al in alle webbrowsers werkte, maar Mozilla botste tegen de snelheidsgrenzen van javascript aan. Omdat javascript een tekstformaat heeft, vraagt het parsen veel rekenkracht, zeker op mobiele toestellen met een wat zwakkere processor. En zo werd in 2015 WebAssembly geboren, een binair instructieformaat voor een virtuele machine in je webbrowser.

Sneller

WebAssembly is dus geen nieuwe programmeertaal, maar een binair formaat voor uitvoerbare programma’s. In de praktijk kan een webontwikkelaar dus gewoon in javascript blijven programmeren en zijn .js-bestanden naar WebAssembly (met de extensie .wasm) compileren.

Het bestandsformaat is ontworpen om zo klein mogelijk te zijn en zo snel mogelijk te parsen. Vergeleken met gecomprimeerde javascript (met gzip) is een functioneel identiek WebAssembly-bestand 10 tot 20 procent kleiner. Maar de grootste snelheidswinst haalt WebAssembly bij het parsen: het binaire formaat is een factor tien sneller te parsen dan het tekstgebaseerde javascript. Het downloaden en parsen zijn twee taken die de opstarttijd in belangrijke mate bepalen, en op beide gebieden is WebAssembly geoptimaliseerd: in totaal zo’n twintig keer sneller.

Maar ook na de opstart is WebAssembly sneller. Het formaat is immers niet beperkt tot wat in javascript uitgedrukt kan worden. Daardoor kan een WebAssembly-programma rechtstreeks gebruikmaken van zaken die heel efficiënt in een moderne processor uitgevoerd worden, zoals rekenen met 64bit-getallen.

De snelheidswinst hangt uiteraard af van het feit of je code deze functies gebruikt. Gemiddeld gezien ziet Mozilla met WebAssembly een vijf procent snelheidswinst vergeleken met asm.js, maar bij encryptiecode kan dat een grootteorde groter zijn. WebAssembly haalt een zo goed als native snelheid.

Universeel formaat

Maar je kunt ook code in heel wat andere programmeertalen naar WebAssembly compileren. Elke programmeertaal die door het compilerinfrastructuurproject LLVM ondersteund wordt, kun je in principe gebruiken. Daarbij zitten onder andere C#, Haskell, Kotlin, Lua, Ruby en Rust. WebAssembly is gewoon een extra compilertarget voor die talen, en te vergelijken met een universele bytecode zoals voor Java.

De snelheid van WebAssembly hangt niet alleen af van de virtuele machine waarop de code wordt uitgevoerd, maar ook van de gebruikte compilerinfrastructuur. Een populaire toolchain voor asm.js en WebAssembly is het op LLVM gebaseerde Emscripten, dat C(++)-code compileert tot geoptimaliseerde code voor het web en daarbij ook bijvoorbeeld OpenGL-code naar WebGL omzet.

©PXimport

WebAssembly ontstond vanaf het begin als een samenwerking tussen Mozilla, Microsoft, Google, Apple en anderen, in de schoot van het World Wide Web Consortium. Het is zwaar op asm.js gebaseerd en gebruikt ook inzichten uit het project Portable Native Client (PNaCl), Google’s platformonafhankelijke versie van NaCl. WebAssembly moet het beste van beide werelden verenigen.

Al het werk gebeurt in de WebAssembly Community Group van het W3C. Op 18 juli publiceerde die de WebAssembly Core Specification als een W3C Candidate Recommendation. De verwachting is dat dit als standaard (‘W3C Recommendation’) aangenomen wordt.

De ontwikkeling van WebAssembly

  • **2008 -**Wapenwedloop voor snelheid begint met javascript-engines als V8, TraceMonkey en Nitro
  • 2011**-** Google introduceert Native Client (NaCl)
  • 2013 - Mozilla ondersteunt asm.js in Firefox Nightly
  • 2015 - WebAssembly wordt aangekondigd
  • 2016 - De belangrijkste functies in WebAssembly zijn gedefinieerd
  • 2017 - Alle grote webbrowsers ondersteunen WebAssembly
  • 2018 - De WebAssembly Working Group publiceert drie W3C Candidate Recommendations

Interoperabiliteit

Precies door die samenwerking van in het begin ondersteunden al in 2017 – nog geen twee jaar na de aankondiging van het project – alle grote webbrowsers WebAssembly, zowel op de desktop als mobiel. Voor oudere webbrowsers kun je een .wasm-bestand overigens gewoon compileren naar asm.js. Dat kan automatisch met een zogenoemde ‘polyfill’: javascript-code die het .wasm-bestand op ondersteunde webbrowsers rechtstreeks uitvoert en in het andere geval compileert naar asm.js en de resulterende javascript-code uitvoert. Twijfel je of je browser WebAssembly ondersteunt, kijk dan eens op de website Can I Use.

WebAssembly is geen alles-of-nietsverhaal. Met de WebAssembly javascript-API laad je eenvoudig WebAssembly-modules in javascriptcode in. Je hoeft dus zelf niet eens iets van WebAssembly te kennen om toch in je webapp te kunnen profiteren van de snelheidswinst. Samen met de stijgende populariteit van WebAssembly zullen er ook meer en meer .wasm-bibliotheken opduiken. Zo heeft Microsoft Blazor, waarmee je C#-code rechtstreeks in de webbrowser draait, inclusief gebruik van bestaande .NET-bibliotheken.

©PXimport

Binaire code

Het binaire formaat laat toe om eenvoudiger code in een website te verbergen. Bovendien is een .wasm-bestand gecompileerd, inclusief allerlei optimalisaties, wat de analyse ervan nog complexer maakt. Het mag dan ook niet verbazen dat malware wasm omarmt. Maar het is slechts een kwestie van tijd voor antimalwaresoftware wasm even goed kan analyseren als native Windows-programma’s.

Ook voor nieuwsgierige powerusers klinkt het binaire formaat op het eerste gezicht niet zo interessant: daar kun je immers niet zomaar de broncode van bekijken zoals bij javascript. Maar daar heeft de WebAssembly Working Group iets voor voorzien: er is ook een tekstgebaseerd formaat: .wat. Een .wasm-bestand kan met tools zoals de WebAssembly Binary Toolkit eenvoudig naar .wat omgezet worden en omgekeerd. Ook de browsermakers geven in hun debugtools de mogelijkheid om de broncode van een .wasm-bestand op de webpagina die je bezoekt te bekijken.

▼ Volgende artikel
Je tuin zomerklaar maken? Mei is hét moment!
© Olga Gorevan
Huis

Je tuin zomerklaar maken? Mei is hét moment!

Zodra de zon zich vaker laat zien, is het heerlijk om buiten te zijn. Mei is dan ook hét moment om je tuin zomerklaar te maken. Door nu de handen uit de mouwen te steken, zorg je dat alles er straks fris en verzorgd bij staat. Nieuwe planten, gesnoeide hagen, een opgeruimde border – dit is de maand om je tuin die welverdiende opfrisbeurt te geven.

Dit doe je deze maand in de tuin:

  • Zaaien en hagen planten
  • Extra aandacht geven aan nieuwe planten
  • Snoeien
  • Je gazon maaien en bemesten

Het jaar rond lekker bezig zijn in de tuin? Kijk dan op onze tuinkalender.

Zaaien en hagen planten

Hoewel de lente volop bezig is, is het slim om het vliesdoek nog even paraat te houden. Vooral in de eerste helft van mei kan het 's nachts nog flink afkoelen. Na IJsheiligen, op 14 mei, kunnen de kuipplanten en eenjarigen definitief naar buiten. Dan is de kans op nachtvorst vrijwel voorbij. Ook met zaaien kun je nu los. Klaprozen, leeuwenbekjes, korenbloemen, zonnebloemen, madeliefjes of duizendschoon – die mogen allemaal direct de volle grond in. Zomerbollen kun je alvast in potten zetten, dan zijn ze straks makkelijk over te planten naar de border. Heb je plannen voor een nieuwe haag? Wacht daar niet te lang mee. Tot half mei kun je nog heesters en coniferen planten.

Extra aandacht geven aan nieuwe planten

Nieuwe planten hebben in deze periode extra water nodig. Gebruik bij voorkeur water uit de regenton – dat is al op temperatuur en beter voor de wortels. Sproei je met leidingwater? Laat het dan als een fijne nevel op de planten vallen, in plaats van er met harde stralen op te richten. Zo voorkom je schade aan jonge scheuten. Een laag mulch helpt de bodem vochtig te houden en voorkomt dat de aarde uitdroogt. Slakken op pad? Strooi wat zaagsel of fijngemalen eierschalen rond de jonge planten, dat houdt ze op afstand. En vergeet de klimplanten niet: die groeien nu razendsnel en kun je het best op tijd aanbinden.

Lees ook: Slakken in de tuin? 8 tips om ervan af te komen

©Zoiakostina | Zoja

Snoeien

Na IJsheiligen kun je de buxus snoeien. Kies bij voorkeur een bewolkte dag, zodat de jonge snoeipunten niet verbranden in de zon. Ook de liguster, laurier, hulst en haagbeuk kun je nu bijwerken. Controleer wel even of er geen vogelnestje in de haag zit voor je aan de slag gaat. Rozen op stam en perkrozen mag je nu drie tot vijf ogen terugsnoeien. Bij vroegbloeiende struiken zoals ranonkelstruik en spirea knip je de uitgebloeide bloemen weg. Zo steekt de plant zijn energie in nieuwe bloemknoppen. Ook voorjaarsbloeiers zoals tulpen, narcissen, hyacinten, rododendrons en de kerstroos kun je nu ontdoen van oude bloemen. En de fuchsia? Die top je juist, zodat hij mooi vertakt.

Lees ook: Welke snoeischaar voor welke snoeiklus?

©SKT Studio - stock.adobe.com

Je gazon maaien en bemesten

Het is al volop lente, maar een flinke regenbui kan nog steeds voor wateroverlast zorgen. Blijft het water op plekken in de tuin staan of voelt de grond te nat aan? Prik dan met een mestvork in de bodem en beweeg deze voorzichtig heen en weer. Zo kan het regenwater beter wegzakken. En als er toch regen wordt voorspeld: dat is hét moment om je gazon te bemesten. Herhaal dit na een maand om het gras sterk en gezond te houden.

In mei maakt het gras een groeispurt. Je kunt het gazon dan één tot twee keer per week maaien – of je doet mee aan Maai Mei Niet. Door een maand niet te maaien, geef je bijen, vlinders en andere insecten meer bloeiende planten om van te leven. Vind je een hoog grasveld geen gezicht? Maai dan alleen een deel en laat de rest staan.

Niet alleen het gras groeit hard, ook het onkruid laat zich volop zien. Trek het eruit op droge dagen, dan komt het niet makkelijk terug. Schoffelen kan ook, maar wees voorzichtig: de wortels van andere planten kunnen daarbij beschadigd raken. Door bodembedekkers te planten maak je het onkruid bovendien lastiger om terrein te winnen.

Lees ook: Grasmaaien: fluitje van een cent met deze tips

▼ Volgende artikel
Bowers & Wilkins brengt nieuwe draadloze hoofdtelefoon Px7 S3 uit
Huis

Bowers & Wilkins brengt nieuwe draadloze hoofdtelefoon Px7 S3 uit

Bowers & Wilkins heeft de nieuwe Px7 S3 draadloze hoofdtelefoon aangekondigd. Deze nieuwe hoofdtelefoon is de opvolger van de Px7 S2e en biedt volgens het Britse audiomerk diverse verbeteringen op het gebied van geluidskwaliteit, comfort en functionaliteit.

De Px7 S3 is uitgerust met nieuw ontworpen 40mm biocellulose drivers waarbij bijna alle componenten zijn vernieuwd, waaronder het chassis, de spreekspoel, ophanging en magneet. Door de zorgvuldige positionering van de drivers ten opzichte van de oren krijgt de luisteraar een beter geluidsbeeld en een meer ruimtelijk stereogeluid. Voor het eerst in een over-ear hoofdtelefoon van Bowers & Wilkins worden de drivers aangedreven door een speciaal ontworpen hoofdtelefoonversterker voor meer dynamiek en energie in het geluid.

De draadloze hoofdtelefoon ondersteunt zowel aptX Adaptive 24/96 als het nieuwe aptX Lossless voor optimale draadloze muziekoverdracht vanaf compatibele apparaten. Ook beschikt de hoofdtelefoon over een 3,5mm aansluiting en USB-C voor bedrade verbindingen.

Ruisonderdrukking

De actieve ruisonderdrukking is volgens Bowers & Wilkins krachtiger dan ooit tevoren. De Px7 S3 is hiervoor voorzien van acht microfoons die strategisch zijn geplaatst om zowel omgevingsgeluid te monitoren als voor heldere telefoongesprekken te zorgen. De hoofdtelefoon gebruikt ADI Pure Voice technologie voor effectieve ruisonderdrukking tijdens gesprekken.

Qua design heeft de Px7 S3 een slanker profiel dan zijn voorganger met een verbeterde pasvorm en optimaal comfort dankzij de oorschelpen met traagschuim. Ook de bijbehorende draagtas is compacter geworden.

De batterijduur bedraagt 30 uur bij ingeschakelde ruisonderdrukking en een snelle oplaadbeurt van 15 minuten levert tot zeven uur extra luistertijd op. Via de Bowers & Wilkins Music-app kan de gebruiker diverse instellingen aanpassen, waaronder een nieuw toegevoegde vijfbands EQ met geheugenposities voor voorkeursinstellingen.

Spatial audio

De Px7 S3 is de eerste hoofdtelefoon van het merk met ondersteuning voor spatial audio, wat later dit jaar via een update beschikbaar komt. Ook zal de hoofdtelefoon ondersteuning krijgen voor Bluetooth LE Audio met Auracast functionaliteit via een toekomstige update.

"Het was een hele uitdaging voor Bowers & Wilkins om een nieuwe hoofdtelefoon te ontwikkelen die de uitzonderlijke prestaties en de lovende kritieken voor ons bestaande assortiment kan overtreffen," aldus Giles Pocock, VP Brand Marketing. "Ik ben ontzettend blij dat het team met de nieuwe Px7 S3 niet alleen die uitdaging heeft aangepakt, maar ook een nieuwe benchmark voor uitmuntendheid in de hoofdtelefooncategorie heeft neergezet."

Beschikbaarheid en prijzen

De Bowers & Wilkins Px7 S3 is nu verkrijgbaar en komt beschikbaar in drie kleuren: Anthracite Black, Indigo Blue en Canvas White. De adviesprijs bedraagt 429 euro.

Bekijk hier andere Bowers & Wilkins-producten op Kieskeurig.nl: