WebAssembly: Značenje, prednosti, slučajevi upotrebe i više

Uhvaćeni ste u hype o WebAssemblyju, ali niste točno sigurni o čemu se radi? Evo nisko.

WebAssembly ili Wasm je format binarnog koda za stvaranje programa koji se mogu izvršavati na bilo kojoj računalnoj arhitekturi.

Sustav se sastoji od virtualnog stroja i kompajlera koji prevodi računalni kod iz programskih jezika, kao što su C ili C++, u formate .wat i binarni .wasm koji mogu čitati ljudi.

Izvorni cilj WebAssemblyja bio je omogućiti programerima da razviju aplikacije visokih performansi za web-stranice omogućavanjem gotovo izvornih brzina izvršavanja unutar preglednika. No čini se da se tehnologija sada razvija izvan preglednika i prelazi u oblak.

Ovaj vam vodič pokazuje sve što trebate znati o ovoj tehnologiji koja se razvija, njezinim snagama i slabostima, kao i njezinom budućem potencijalu.

Što je WebAssembly?

WebAssembly je format binarnog koda koji radi na virtualnom stroju i na koji se mogu kompajlirati različiti jezici. Dizajniran je da bude prenosiv i može se izvoditi u web pregledniku ili kao poslužiteljska aplikacija.

Prvi put objavljen 2017., WebAssembly je preporuka W3C-a od 2019. i održavaju ga brojni suradnici, uključujući Mozillu, Google, Microsoft, Red Hat i mnoge druge.

Izvorni cilj bio je razviti brzine izvršavanja gotovo izvorne kakve biste mogli naći s C/C++ aplikacijama unutar preglednika. Također je namijenjen da bude siguran web standard otvorenog standarda s mogućnošću otklanjanja pogrešaka i bez verzije koji je kompatibilan s prethodnim verzijama i usklađen s JavaScriptom.

Kako radi WebAssembly?

WebAssembly je dizajniran kao runtime engine, kao što je Java ili JavaScript, koji se može ugraditi u okruženje preglednika ili poslužitelja za pokretanje računalnog koda kompajliranog u .wasm binarnom ili .wat tekstualnom formatu.

Da bi napisao kod za izvođenje WebAssembly, programer piše program na bilo kojem od brojnih podržanih jezika. Zatim ga prevedite pomoću WebAssembly prevoditelja ili AOT (Unaprijed) ili JIT (upravo na vrijeme).

Ovaj kod može obaviti većinu posla u izvršnom okruženju, ali ne može pristupiti niti modificirati DOM objekte preglednika. Svaka takva interakcija mora proći kroz JavaScript.

Kako stvoriti oglednu aplikaciju WebAssembly

Stvaranje jednostavne Wasm aplikacije za web preglednik moguće je u samo nekoliko koraka kao što možete vidjeti u nastavku:

  1. Preuzmite i instalirajte Emscripten SDK.
  2. Napišite svoj uzorak helloworld.c kod ili to učinite u C++/Rust ako želite.
  3. trčanje emcc helloworld.c -s WASM=1 -s helloworld.html u terminalu za kompajliranje koda u WebAssembly s Emscriptenom. Stvorit će Wasm binarne, HTML i JavaScript datoteke koje su vam potrebne (glue code).
  4. Poslužujte stranicu helloworld.html putem svog web preglednika.

Prednosti WebAssemblyja

Postoje mnogi razlozi za usvajanje WebAssembly i njegovih povezanih tehnologija, a oni uključuju:

  • Izvedba gotovo izvorna – WebAssembly ima tako nisku razinu dizajna da nudi performanse slične jezicima niske razine kao što su C i C++.
  • Sigurnost – Sustav je dizajniran da bude siguran izoliranjem u virtualnom okruženju s ograničenim pristupom sustavu.
  • Otvori Standard – Mnoge organizacije i pojedinci pridonose WebAssemblyju i to je službena preporuka W3C-a.
  • Lak – WebAssembly kompajlira u binarni kod koji se izvršava u virtualnom stroju. Ovaj kod je prenosiv i ne treba niti dolazi sa sistemskim datotekama.
  • Višejezična podrška – Više od 50 jezika može se prevesti u WebAssembly.
  • Neovisno o platformi – Virtualni stroj WebAssembly dizajniran je za svaku arhitekturu kako bi predstavljao isto okruženje za izvođenje. Sve što programer treba učiniti je napisati kod za WebAssembly.

Ograničenja WebAssemblyja

  • Radovi u tijeku – Standard je još uvijek u razvoju i stoga mnoge značajke i poboljšanja tek dolaze.
  • Nema odvoza smeća – WebAssembly još uvijek nema skupljanje smeća, iako bi uskoro moglo biti implementirano.
  • Nema pristupa DOM-u – Ne možete pristupiti DOM-u web preglednika izravno iz WebAssemblyja, morat ćete proći kroz JavaScript.

WebAssembly protiv Jave

Java je neka vrsta najranije implementacije WebAssemblyja. Dizajniran je kao jezik za jednokratno pisanje, pokretanje bilo gdje, ali je usput nastao niz problema.

Baš kao i kod Jave, WebAssembly koristi RE (Runtime Environment) za izvođenje svog koda, ali za razliku od Jave, WebAssembly možete pisati na jeziku po vašem izboru.

WebAssembly protiv JavaScripta

WebAssembly se izvršava u pregledniku ili drugom okruženju glavnog računala, baš kao JavaScript. Međutim, tamo gdje se JavaScript isporučuje izvršnom okruženju u tekstualnom formatu i kompilira točno na vrijeme, WebAssembly ima i tekstualni i binarni format.

Unutar web preglednika, JavaScript ima pristup DOM-u, dok WebAssembly nema. Međutim, kada je riječ o brzini izvršenja, WebAssembly pobjeđuje JavaScript, sa svojim brzinama izvršavanja gotovo izvornog koda.

Brzina je ono u čemu WebAssembly blista i razlog zašto je idealan za toliko mnogo upotreba. WebAssembly možete učitati u preglednik koristeći JavaScript i dva koda mogu raditi zajedno i dijeliti resurse.

WebAssembly vs Docker vs Kubernetes

Docker i Kubernetes dvije su popularne tehnologije koje pokreću računalstvo u oblaku. Docker je tehnologija spremnika koja razvojnim programerima omogućuje pakiranje aplikacije sa svim njezinim ovisnostima o sustavu u jedan paket. To olakšava implementaciju aplikacije u bilo kojem okruženju oblaka u sekundi ili manje.

Kubernetes je, s druge strane, sustav otvorenog koda za upravljanje i implementaciju kontejnerskih aplikacija kao što su Docker, CRI-O, kontejner i bilo koja implementacija Kubernetes CRI (Container Runtime Interface). Kubernetes također olakšava skaliranje implementacija oblaka na više poslužitelja ili virtualnih strojeva.

S ovog stajališta, WebAssembly je sličniji Dockeru i može se pokrenuti kao kontejnerska aplikacija u oblaku pomoću Kubernetesa. Također nudi mnoge prednosti u odnosu na Docker, ali ga vjerojatno neće zamijeniti.

Izvan preglednika

U početku su postojali web poslužitelji. Morali ste posvetiti cijeli stroj kao poslužitelj. Zatim su postojali virtualni strojevi ili VM-ovi koji su poslužitelju omogućavali rad na samo jednoj ili više CPU niti. Ipak, morali ste imati namjenski VM.

Cloud computing omogućio je pokretanje i pokretanje poslužitelja samo kada je to potrebno kontejneriziranjem aplikacija. To je dovelo do smanjenja troškova, jer ste morali platiti samo ono što koristite – nema više namjenskih strojeva. Ali još uvijek postoji nekoliko problema.

Prvo, docker datoteke mogu biti velike nekoliko gigabajta, a to znači malo kašnjenje u pokretanju i druge probleme upravljanja. Međutim, slična Wasm datoteka može biti velika samo nekoliko MB jer je unaprijed kompajlirana binarna datoteka. To mu daje puno brže vrijeme pokretanja od Dockera, savršeno za određene vremenski kritične aplikacije.

Drugo, WebAssembly dizajn znači da programer ne mora upravljati i dodjeljivati ​​sistemske resurse, on jednostavno može prijeći na stvar koristeći svoj programski jezik po izboru.

Ove značajke čine WebAssembly idealnim za pokretanje mikro-usluga u oblaku, iako su Docker aplikacije i dalje poželjnije za aplikacije koje zahtijevaju veću kontrolu nad operativnim okruženjem i datotečnim sustavom.

Za više informacija, projekti poput WasmCloud i WasmEdge razvijaju WebAssembly u održivu platformu za računalstvo.

Slučajevi korištenja Wasma

Postoji mnogo slučajeva upotrebe za WebAssembly, s obzirom na njegovu osebujnu prirodu. Mogu se podijeliti u tri velike skupine; unutar preglednika, izvan preglednika i hibridne postavke.

Vrsta unutar preglednika je sama po sebi razumljiva i izvan preglednika se uglavnom odnosi na poslužitelje, IoT i implementacije u oblaku, dok se hibrid odnosi na kombinaciju to dvoje.

Slijedi pregled slučajeva upotrebe u kojima se Wasm može istaknuti:

  • Već postojeći kod visokih performansi – Stari, ali izvrstan kod koji možete jednostavno prenijeti na WebAssembly.
  • Novi kod visokih performansi – One koje morate osmisliti i implementirati od nule.
  • Prijenos desktop aplikacija na web – Ovo bi moglo otvoriti novu vrstu stolnih rješenja temeljenih na webu, kao što su uređivanje videozapisa na webu.
  • Cloud computing – Trčanje uz Docker i Kubernetes za nove prilike.

Slijedi pregled specifičnih aplikacija i scenarija u kojima Wasm može briljirati:

  • Uređivanje videa i slika
  • Dizajn igre
  • AI aplikacije
  • Aplikacije virtualne i proširene stvarnosti
  • Glazbene aplikacije
  • P2P aplikacije
  • Aplikacije na strani poslužitelja
  • Računanje u oblaku/klasteru
  • Projektiranje pomoću računala
  • Simulacija OS platforme
  • Šifriranje
  • Lokalni web poslužitelj
  • Aplikacije za udaljenu radnu površinu
  • Znanstvene vizualizacije
  • Hibridne izvorne aplikacije na pametnim telefonima
  • Na IoT uređajima

Popis podržanih jezika i okvira

Preko 50 jezika kompilira se u WebAssembly, a evo nekih od najpopularnijih:

  • C
  • C + +
  • R
  • Rubin
  • Brz
  • Go
  • Kotlin
  • Hrđa
  • PHP
  • blejzer – Okvir za .NET programere.
  • JwebAssembly – Kompajler za Java bytecode i srodne jezike kao što su JRuby, Jython, Groovy, Scala i Kotlin.
  • Tisa – Rust okvir za stvaranje višenitnih web aplikacija pomoću WebAssemblyja.
  • AssemblyScript – Jezik posebno dizajniran za stvaranje WebAssembly koda.
  • Zrno – Strogo tipiziran funkcionalni jezik.
  • Motoko

Možete pronaći više jezika ovdje.

Popis vremena izvođenja i alata WebAssembly

  • Svi glavni preglednici imaju podršku za Wasm
  • Pjodid – Python runtime u pregledniku sa Python znanstvenim skupom, uključujući Pandas, NumPy, SciPy.
  • wamr
  • težina – Za mikro usluge i web aplikacije
  • Wasi – Modularno sučelje sustava
  • WasmTime – Brzo i sigurno vrijeme izvođenja WebAssembly.
  • Wasmer
  • Lucet
  • wasmCloud – Cloud okruženje
  • Krustlet – Kubernetes kublete za pokretanje Wasma, napisano u Rustu.
  • WasmEdge – Cloud i edge runtime okruženje

Zaključak

Došli smo do kraja našeg putovanja u WebAssembly i ono što on sadrži za računalstvo. I kao što vidite, mnogo obećava.

To je još uvijek u tijeku, ali u stalnom razvoju. A ako ste zainteresirani, možete pronaći više informacija ovdje, ovdjei ovdje.

Nnamdi Okeke

Nnamdi Okeke

Nnamdi Okeke je računalni entuzijast koji voli čitati širok raspon knjiga. Više voli Linux nego Windows/Mac i koristio ga je
Ubuntu od svojih ranih dana. Možete ga uhvatiti na twitteru putem bongotrax

Članci: 299

Primajte tehnološke stvari

Tehnički trendovi, trendovi startupa, recenzije, online prihod, web alati i marketing jednom ili dvaput mjesečno