WebAssembly: tehokas formaatti verkkoympäristöä varten

Verkkokehitystä ohjaa pyrkimys kohti jatkuvasti nopeampia, tehokkaampia ja helppokäyttöisempiä ratkaisuja, jotka helpottavat sekä ohjelmistokehittäjien että verkon palveluntarjoajien työtä. Kehitysaskeleita otetaan jatkuvasti eteenpäin, mikä näkyy esimerkiksi nykypäivän runsaassa määrässä erilaisia verkkosovelluksissa hyödynnettäviä teknologioita ja standardeja.

WebAssembly on yksi tällaisista uudemmista ja kehitteillä olevista teknologioista. Kyseessä on binääriformaatti, johon useat eri ohjelmointikielet voidaan kääntää. WebAssembly-koodia voidaan suorittaa useilla eri alustoilla hyödyntäen alustakohtaista suorituskykyä mahdollisimman tehokkaasti. Yksinkertaistettuna WebAssembly on siis kommunikointiprotokolla, jonka avulla yhdellä ohjelmointikielellä kirjoitettua koodia voidaan lopulta suorittaa tehokkaasti eri alustoilla.

Mitä hyötyjä WebAssembly tuo verkkokehitykseen, ja millainen on formaatin nykytilanne ja tulevaisuus?

Päämääränä suorituskyvyn lisääminen

Kun puhutaan verkkoympäristöistä, kaikki sovellukset pyörivät verkossa tänä päivänä käytännössä komentokieli JavaScriptillä. Esimerkiksi Google Chromen ja Microsoft Edgen pohjalla pyörivä Chromium-moottori perustuu JavaScriptiin, ja se on toki nykyisin suorituskyvyltään todella tehokas, sillä sitä on kehitetty paljon suosionsa vuoksi. 

JavaScriptissä on kuitenkin hidasteensa. Jos käytössä on esimerkiksi verkkosovellus, joka suorittaa paikallisesti hyvin raskaita operaatioita, operaatiot pyörivät suhteellisesti hitaasti JavaScript-moottorilla. Tämä johtuu siitä, että JavaScript käännetään natiiviympäristön ymmärtämäksi koodiksi juuri ennen sen suoritusta, mikä taas vie aikaa varsinaiselta suorittamiselta.

WebAssemblyn avulla pyritään nopeuttamaan tätä kommunikaatiota siten, että JavaScriptiä ei tarvitse enää kääntää juuri ennen sen suorittamista; sen sijaan WebAssembly  käännetään jo etukäteen binäärikoodiksi, jota suoritusympäristö, kuten vaikkapa Windows tai Android, voi suorittaa sellaisenaan. WebAssembly on siis kehitetty, jotta sovelluksia suorittavien päätelaitteiden suorituskyvystä saataisiin vielä aiempaakin enemmän irti.

Jos suoritettavana on jokin erityisen suorituskykyintensiivinen operaatio, joka pitäisi suorittaa tietyllä päätelaitteella ja verkkosovelluksella selaimessa, WebAssembly on siihen ehdottomasti suositeltava ratkaisu. Hyvä esimerkki tällaisesta on vaikkapa jokin nykyaikainen 3D-peli, sillä 3D-laskenta on yleisesti aika raskasta. Jos peliä varten halutaan kehittää vaikkapa jokin renderöintimoottori, WebAssembly voi laskea kaikki näytöllä näytettävät arvot, minkä jälkeen se voidaan välittää JavaScript-moottorille, jonka tehtäväksi jää kuvan renderöinti arvojen perusteella.

  • Natiivikoodin kanssa kommunikointi syö tehoa verkkosovelluksessa pyörivistä, JavaScript-pohjaisista operaatioista
  • WebAssembly tehostaa verkkosovellusten suorituskykyä ja nopeuttaa operaatioita natiiviystävälliseksi valmiiksi käännetyllä koodilla
  • WebAssembly on erityisen kätevä formaatti suorittamaan laitteilla raskaita operaatioita, joista yksi esimerkki on tehoa vaativat pelit
  • Avainsana on siis suorituskyvyn lisääminen

Data parsitaan kokoon WebAssemblyssa ja palautetaan JavaScriptille

WebAssemblyyn voidaan kirjoittaa koodia suoraan eri ohjelmointikielillä, joihin formaatti tarjoaa valmiiksi kääntäjät – WebAssemblya ei siis ole tarkoitus kirjoittaa itse. 

Eri kielille, kuten vaikkapa C-kielille, Rustille sekä Kotlinille on WebAssemblyssä omat moduulinsa, jotka kääntävät koodin suoraan WebAssembly-koodiksi. Eli sen lisäksi, että natiivitehokkuudella suorittuvaa koodia saadaan tuotettua monessa ympäristössä, sitä voidaan siis kirjoittaa useilla eri ohjelmointikielillä, eikä kehittäjien tarvitse opetella uusia kieliä sen käyttöä varten.

Koska WebAssembly toimii verkkopohjaisesti, se sisältää rajapinnat selaimeen upotusta varten eli se toimii JavaScript-ohjelmointirajapinnan kautta. Jos selaimessa täytyy muokata esimerkiksi sen omia ominaisuuksia tai päivittää verkkosivua, dataa käsitellään JavaScriptin kautta, mutta suorituskyky itsessään tapahtuu sisäisesti binäärikoodin nopeudella. 

Kun vaikkapa suurta datakokonaisuutta koetetaan parsia kokoon JavaScriptillä haluttua käyttötarkoitusta varten, se siirretään ensin WebAssemblyn puolelle, jossa data muokataan nopeasti halutun kaltaiseksi. Tämän jälkeen valmis ja käsitelty data palautetaan takaisin JavaScriptille. WebAssemblya ei olekaan pääasiallisesti kehitetty muodostamaan itsenäisesti toimivia kokonaisuuksia vaan toimimaan jonkin kehyksen sisällä operaatioita tehostavana työkaluna.

  • Useat eri ohjelmointikielet voidaan kääntää suoraan WebAssemblyksi – sitä ei siis kirjoiteta itse
  • Verkkopohjainen WebAssembly toimii JavaScript-rajapinnan kautta tehostaen suorituskykyä
  • Formaatin avulla voidaan esimerkiksi parsia suuri datakokonaisuus kokoon nopeasti ja tehokkaasti

Monipuolisesti eri päätelaitteilla toimivat sovellukset

WebAssembly on myös standardiformaatti sitä varten, että sillä voidaan luoda sovelluksia, jotka toimivat monipuolisesti kaikilla laitteilla. Formaatin avulla voidaan toteuttaa sovelluksia, niiden palasia tai yksittäisiä koodinpätkiä, jotka toimivat suorituskykyisemmin mutta jotka voidaan jakaa käyttäjille verkon kautta tai sovelluksien sisällä –  loppukäyttäjän ei siis tarvitse tehdä mitään ylimääräistä saadakseen teknologian hyödyt käyttöönsä eri laitteilla.

Yksi formaatin eduista onkin juuri se, että sama koodi toimii useammissa paikoissa, mikä alkaakin olla jo normi ja vaatimus nykypäivän teknologisten laitteiden parissa. Teknologian kehityksen myötä nykypäivänä käytetään valtavasti erilaisia laitteita sekä alustoja, joilla sovelluksia ja erilaisia ominaisuuksia täytyy pystyä pyörittämään. 

Laitekehityksen ja määrän kasvamisen myötä on todettu, että useiden koodipohjien ylläpitäminen asioiden jakamista eri laitteita varten on suhteellisen kustannustehotonta. WebAssemblyn etuihin kuuluukin koodin jakamisen tehostaminen yhteisellä pohjalla, minkä myötä sovelluksia voidaan toteuttaa useilla eri alustoilla.

  • Yksi WebAssemblyn eduista on koodin toimivuuden mahdollistaminen useilla eri laitteilla ja alustoilla
  • Nykypäivän teknologisten laitteiden valtavan määrän myötä monikäyttöisyys alkaakin olla lähes normi ja vaatimus
  • WebAssembly mahdollistaa siis yhteisen pohjan koodin jakamisen tehostamiseksi

Formaatin tämänhetkinen tilanne ja tulevaisuus

WebAssemblya tuetaan jo suurimmassa osassa selaimia ja käyttöjärjestelmiä, eli sen käyttö onnistuu teorian tasolla jo todella suuressa määrässä nykyaikaisia laitteita. Formaatti ei kuitenkaan ole levinnyt vielä laajasti yleisellä tasolla, koska sitä varten ei ole tullut vielä tarpeeksi helppokäyttöistä ohjelmistokehystä eli frameworkia. Tarjolla ei ole vielä esimerkiksi sellaisia kehyksiä, joilla voisi tehdä kätevästi kokonaisia käyttöliittymiä WebAssemblya käyttäen.

Useat eri kehykset tukevat WebAssembly-koodia, mutta ne eivät tarjoa minkäänlaista suoraa tapaa esimerkiksi verkkosivun eri toimintojen suorittamiseen tai kätevään ulkoasun päivittämiseen. Formaatti tarjoaa siis tavan tehdä asioita muttei verkkokehityksen yleisesti vaatimia ohjenuoria, jotta palveluntarjoajien kannattaisi lähteä käyttämään sitä. 

  • WebAssemblya tuetaan jo suuressa osassa selaimia ja käyttöjärjestelmiä, eli perusta laajenemiselle on olemassa
  • Ohjelmistokehykset eivät vain vielä tarjoa mahdollisuuksia hyödyntää WebAssemblyä kätevästi ja kokonaisvaltaisesti 

Ohjelmistokehykset on kehitetty sitä varten, että ohjelmoijan ei tarvitse kirjoittaa kaikkea itse, vaan työhön on olemassa työkalut sekä standardoitu tapa tehdä asia – tämä mahdollistaa kehittäjältä itse logiikkaan keskittymisen. Tällä hetkellä verkkokehitys onkin menossa suuntaan, jossa tehdään jatkuvasti vain kätevämpiä ja kätevämpiä JavaScript-ohjelmistokehyksiä.

WebAssemblystä voi hyvinkin tulla valtavirran formaatti, muttei kuitenkaan aivan lähitulevaisuudessa. Vaatii siis vielä aika paljon työtä, jotta se voitaisiin valjastaa käteväksi ja järkevästi käytettäväksi ja suorituskykyiseksi vaihtoehdoksi. Tällä hetkellä se ei vielä taivu työhön niin kätevästi, että se olisi kannattavaa suurimmassa osassa verkon sovelluksia. WebAssemblyä käytetään kuitenkin jo nykyään yksittäisissä räätälöidyissä ratkaisuissa tiettyihin spesifeihin tarkoituksiin.

Verkkokehityksessä on perinteisesti vallinnut tunnetun sanonnan mukainen ajattelumalli: if it ain’t broke, don’t fix it. Verkkosovellukset toimivat siis suurimmaksi osaksi riittävän hyvin monen palveluntarjoajan mielestä, eikä suorituskykyä tarvita ainakaan akuutisti lisää. Toki jos sitä saisi ilmaiseksi, totta kai; tällä hetkellä se ei kuitenkaan ole vielä kannattavaa työn määrän vuoksi. 

Formaatti on joka tapauksessa lupaava aloitus natiivipuolen ja web-puolen välimatkan lyhentämiseen.  Ja mitä enemmän tällaisia teknologioita ja standardeja jatkuvasti kehitetään, sitä monipuolisemmat työkalut verkkoympäristöjen kehittäjillä on tulevaisuutta varten.

  • WebAssemblylla on mahdollisuudet valtavirran formaatiksi, muttei aivan lähivuosina
  • Vallalla on tällä hetkellä kätevät JavaScript-kehykset, jotka toimivat palveluntarjoajien mielestä riittävän hyvin 
  • Formaatti soveltuu tällä hetkellä hyvin tarkasti määriteltyihin ja räätälöityihin ratkaisuihin
  • WebAssemblyssa on kuitenkin merkittävästi potentiaalia, ja jo tällä hetkellä se toimii erinomaisesti web- ja natiivipuolien välimatkan lyhentämisessä tehostaen kommunikaatiota