WebAssembly: Semnificație, Avantaje, cazuri de utilizare și multe altele
Publicat: 2022-10-12WebAssembly sau Wasm este un format de cod binar pentru crearea de programe care se pot executa pe orice arhitectură de computer.
Sistemul cuprinde o mașină virtuală și un compilator care traduce codul computerului din limbaje de programare, cum ar fi C sau C++, în formatele .wat și binare .wasm, care pot fi citite de om.
Scopul inițial al WebAssembly a fost de a permite programatorilor să dezvolte aplicații de înaltă performanță pentru pagini web, permițând viteze de execuție aproape native în interiorul unui browser. Dar acum tehnologia pare să evolueze dincolo de browsere și în cloud.
Acest ghid vă arată tot ce trebuie să știți despre această tehnologie în evoluție, punctele sale forte și punctele slabe, precum și despre potențialul ei viitor.
Cuprins
Ce este WebAssembly?
WebAssembly este un format de cod binar care rulează pe o mașină virtuală și în care se pot compila diferite limbi. Este conceput pentru a fi portabil și poate rula pe un browser web sau ca aplicație de server.
Lansat pentru prima dată în 2017, WebAssembly este o recomandare W3C din 2019 și este întreținut de numeroși colaboratori, inclusiv Mozilla, Google, Microsoft, Red Hat și mulți alții.
Scopul inițial a fost de a dezvolta viteze de execuție aproape native, așa cum ați găsi cu aplicațiile C/C++ din browser. De asemenea, este menit să fie un standard web sigur, standard deschis, depanabil și fără versiuni, compatibil cu versiunea anterioară și compatibil cu JavaScript.
Cum funcționează WebAssembly?
WebAssembly este conceput ca un motor de rulare, cum ar fi Java sau JavaScript, care poate fi încorporat într-un mediu de browser sau server pentru a rula cod de computer compilat în formatele de text .wasm binar sau .wat.
Pentru a scrie cod pentru execuția WebAssembly, dezvoltatorul scrie programul în oricare dintre numeroasele limbi acceptate. Apoi compilați-l folosind un compilator WebAssembly, fie AOT (Ahead of Time), fie JIT (just in time).
Acest cod poate face cea mai mare parte a muncii în mediul de execuție, dar nu poate accesa sau modifica obiectele DOM ale unui browser. Orice astfel de interacțiune trebuie să treacă prin JavaScript.
Cum se creează un exemplu de aplicație WebAssembly
Crearea unei aplicații Wasm simplă pentru browserul web este posibilă cu doar câțiva pași, așa cum puteți vedea mai jos:
- Descărcați și instalați SDK-ul Emscripten.
- Scrieți exemplul de cod helloworld.c sau faceți-o în C++/Rust dacă preferați.
- Rulați emcc helloworld.c -s WASM=1 -s helloworld.html într-un terminal pentru a compila codul în WebAssembly cu Emscripten. Acesta va crea fișierele binare Wasm, HTML și JavaScript de care aveți nevoie (codul glue).
- Serviți pagina helloworld.html prin browserul dvs. web.
Avantajele WebAssembly
Există multe motive pentru a adopta WebAssembly și tehnologiile aferente acestuia, acestea includ:
- Performanță aproape nativă – WebAssembly are un design atât de la nivel scăzut încât oferă performanțe similare cu limbajele de nivel scăzut, cum ar fi C și C++.
- Securitate – Sistemul este proiectat pentru a fi sigur prin izolarea acestuia într-un mediu virtual cu acces limitat la sistem.
- Standard deschis – Multe organizații și indivizi contribuie la WebAssembly și este o recomandare oficială W3C.
- Ușor – WebAssembly se compilează în cod binar pentru a fi executat într-o mașină virtuală. Acest cod este portabil și nu are nevoie și nu vine cu fișiere de sistem.
- Suport în mai multe limbi – Peste 50 de limbi se pot compila în WebAssembly.
- Independent de platformă – Mașina virtuală WebAssembly este proiectată pentru ca fiecare arhitectură să prezinte același mediu de rulare. Tot ce trebuie să facă un dezvoltator este să scrie cod pentru WebAssembly.
Limitările WebAssembly
- Lucrări în desfășurare – Standardul este încă în dezvoltare și, prin urmare, multe caracteristici și îmbunătățiri urmează încă să vină.
- Fără colectare a gunoiului – WebAssembly încă nu are colectarea gunoiului, deși ar putea fi implementată în curând.
- Fără acces DOM – Nu puteți accesa DOM-ul unui browser web direct din WebAssembly, va trebui să treceți prin JavaScript.
WebAssembly vs Java
Java este un fel de cea mai veche implementare a WebAssembly. A fost conceput ca un limbaj scris o singură dată, rulat oriunde, dar a dezvoltat o mulțime de probleme pe parcurs.
La fel ca și în cazul Java, WebAssembly folosește un RE (Runtime Environment) pentru a-și executa codul, dar spre deosebire de Java, puteți scrie WebAssembly în limba dorită.
WebAssembly vs JavaScript
WebAssembly se execută în browser sau în alt mediu gazdă, la fel ca JavaScript. Cu toate acestea, acolo unde JavaScript este livrat mediului de execuție în format text și este compilat la timp, WebAssembly are atât formate text, cât și binar.

În interiorul browserelor web, JavaScript are acces la DOM, în timp ce WebAssembly nu. Cu toate acestea, când vine vorba de viteza de execuție, WebAssembly bate JavaScript, cu vitezele sale de execuție a codului aproape native.
Viteza este locul în care WebAssembly strălucește și motivul pentru care este ideal pentru atât de multe utilizări. Puteți încărca WebAssembly într-un browser utilizând JavaScript, iar cele două coduri pot rula împreună și pot partaja resurse.
WebAssembly vs Docker vs Kubernetes
Docker și Kubernetes sunt două dintre tehnologiile populare care alimentează cloud computing. Docker este o tehnologie container care permite dezvoltatorilor să împacheteze o aplicație cu toate dependențele sale de sistem într-un singur pachet. Acest lucru facilitează implementarea aplicației în orice mediu cloud într-o secundă sau mai puțin.
Kubernetes, pe de altă parte, este un sistem open-source pentru gestionarea și implementarea aplicațiilor containerizate, cum ar fi Docker, CRI-O, containerd și orice implementare Kubernetes CRI (Container Runtime Interface). Kubernetes facilitează, de asemenea, scalarea implementărilor cloud pe mai multe servere sau mașini virtuale.
Din acest punct de vedere, WebAssembly este mai asemănător cu Docker și poate fi făcut să ruleze ca o aplicație cloud containerizată folosind Kubernetes. De asemenea, oferă multe avantaje față de Docker, dar probabil că nu îl va înlocui.
Dincolo de browser
La început, au existat servere web. Trebuia să dedici o mașină completă ca server. Apoi, au existat mașini virtuale, sau VM, care permiteau unui server să ruleze doar pe unul sau mai multe fire CPU. Totuși, trebuia să ai un VM dedicat.
Cloud computing a făcut posibilă lansarea și rularea serverelor numai atunci când este necesar prin containerizarea aplicațiilor. Acest lucru a dus la o reducere a costurilor, deoarece trebuia să plătiți doar pentru ceea ce utilizați – nu mai există mașini dedicate. Dar mai sunt câteva probleme.
În primul rând, fișierele Docker pot avea câțiva gigaocteți mari, iar acest lucru înseamnă o mică întârziere la pornire și alte probleme de gestionare. Un fișier Wasm similar, totuși, poate avea doar câțiva MB, deoarece este un binar pre-compilat. Acest lucru îi oferă un timp de pornire mult mai rapid decât Docker, perfect pentru anumite aplicații critice de timp.
În al doilea rând, designul WebAssembly înseamnă că dezvoltatorul nu trebuie să gestioneze și să aloce resursele sistemului, ci pur și simplu poate ajunge la subiect folosind limbajul de programare ales.
Aceste caracteristici fac din WebAssembly ideal pentru rularea micro-serviciilor cloud, deși aplicațiile Docker sunt încă de preferat pentru aplicațiile care necesită mai mult control asupra mediului de operare și a sistemului de fișiere.
Pentru mai multe informații, proiecte precum WasmCloud și WasmEdge dezvoltă WebAssembly într-o platformă de calcul viabilă.
Cazuri de utilizare Wasm
Există multe cazuri de utilizare pentru WebAssembly, având în vedere natura sa particulară. Ele pot fi împărțite în trei grupuri majore; configurații în browser, în afara browserului și hibride.
Tipul din browser se explică de la sine, iar în afara browserului se referă în principal la implementări de server, IoT și cloud, în timp ce hibridul se referă la o combinație a celor două.
Mai jos este o privire asupra cazurilor de utilizare în care Wasm poate excela:
- Cod de înaltă performanță deja existent – Cod vechi, dar minunat, pe care îl puteți porta doar în WebAssembly.
- Cod nou de înaltă performanță – Cele pe care trebuie să le proiectați și să le implementați de la zero.
- Portarea aplicațiilor desktop pe web – Acest lucru ar putea deschide o nouă generație de soluții desktop bazate pe web, cum ar fi editarea video bazată pe web.
- Cloud computing – Alături de Docker și Kubernetes pentru noi oportunități.
Mai jos este o privire asupra aplicațiilor și scenariilor specifice în care Wasm poate excela:
- Editare video și imagini
- Design-ul jocului
- Aplicații AI
- Aplicații de realitate virtuală și augmentată
- Aplicații muzicale
- aplicații P2P
- Aplicații pe partea serverului
- Calcule cloud/cluster
- Proiectare asistată de calculator
- Simularea platformei OS
- Criptare
- Server web local
- Aplicații desktop la distanță
- Vizualizări științifice
- Aplicații native hibride pe smartphone-uri
- Pe dispozitivele IoT
Lista de limbi și cadre acceptate
Peste 50 de limbi se compilează în WebAssembly și iată câteva dintre cele mai populare:
- C
- C++
- R
- Rubin
- Rapid
- Merge
- Kotlin
- Rugini
- PHP
- Blazor – Un cadru pentru dezvoltatorii .NET.
- JwebAssembly – Compilator pentru codul de octeți Java și limbaje conexe precum JRuby, Jython, Groovy, Scala și Kotlin.
- Yew – Un cadru Rust pentru crearea de aplicații web cu mai multe fire folosind WebAssembly.
- AssemblyScript – Un limbaj special conceput pentru a crea cod WebAssembly.
- Grain – Un limbaj funcțional puternic tipizat.
- Motoko
Puteți găsi mai multe limbi aici.
Lista de runtime și instrumente WebAssembly
- Toate browserele majore au suport Wasm
- Pyodide – Runtime Python în browser cu stiva științifică Python, inclusiv Pandas, NumPy, SciPy.
- wamr
- wagi – Pentru micro-servicii și aplicații web
- Wasi – Interfață de sistem modulară
- WasmTime – Timp de rulare WebAssembly rapid și sigur.
- Wasmer
- Lucet
- wasmCloud – mediu cloud
- Krustlet – Kubernetes kublete pentru rularea Wasm, scris în Rust.
- WasmEdge – mediu de rulare cloud și edge
Concluzie
Am ajuns la sfârșitul călătoriei noastre în WebAssembly și ceea ce are acesta pentru calcul. Și după cum puteți vedea, este foarte promițător.
Este încă o lucrare în curs, dar în continuă dezvoltare. Și dacă ești interesat, poți găsi mai multe informații aici, aici și aici.