Cloudflare, Mozilla ja Facebook kehittävät BinaryAST:n nopeuttaakseen JavaScriptin lataamista

Insinöörejä Cloudflaresta, Mozillasta, Facebookista ja Bloombergistä tarjotaan uusi muoto binaryAST nopeuttaa JavaScript-koodin toimittamista ja käsittelyä avattaessa sivustoja selaimessa. BinaryAST siirtää jäsennysvaiheen palvelinpuolelle ja toimittaa jo luodun abstraktin syntaksipuun (AST). Vastaanotettuaan BinaryAST:n selain voi siirtyä välittömästi käännösvaiheeseen ohittaen JavaScript-lähdekoodin jäsentämisen.

Kokeiluun valmistetut MIT-lisenssin alainen viitetoteutus. Node.js-komponentteja käytetään jäsentämiseen, ja optimoinnin ja AST-luonnon koodi on kirjoitettu ruosteella. Selainpuolen tuki
BinaryAST on jo saatavilla kielellä öisiä rakennuksia Firefox. BinaryASTin kooderia voidaan käyttää sekä loppusivuston työkalutasolla että ulkoisten sivustojen komentosarjojen pakkaamiseen välityspalvelimen tai sisällönjakeluverkon puolella. Tällä hetkellä työryhmän BinaryASTin standardointiprosessi on jo alkanut ECMA TC39, jonka jälkeen muoto voi toimia rinnakkain olemassa olevien sisällönpakkausmenetelmien, kuten gzip ja brotli, kanssa.

Cloudflare, Mozilla ja Facebook kehittävät BinaryAST:n nopeuttaakseen JavaScriptin lataamista

Cloudflare, Mozilla ja Facebook kehittävät BinaryAST:n nopeuttaakseen JavaScriptin lataamista

JavaScriptiä käsiteltäessä koodin lataus- ja jäsennysvaiheeseen kuluu huomattava määrä aikaa. Ottaen huomioon, että ladatun JavaScriptin määrä monilla suosituilla sivustoilla on lähes 10 Mt (esimerkiksi LinkedInissä - 7.2 Mt, Facebookissa - 7.1 Mt, Gmailissa - 3.9 Mt), JavaScriptin alkukäsittely aiheuttaa huomattavan viiveen. Jäsennysvaihe selaimen puolella on myös hidastunut, koska AST:ta ei pystytä rakentamaan kokonaan lennossa, kun koodia ladataan (selaimen on odotettava koodilohkojen lataamista loppuun, kuten toimintojen loppuminen, tiedot, jotka puuttuvat nykyisten elementtien jäsentämiseksi).

He yrittävät ratkaista ongelman osittain jakamalla koodia minimoidussa ja pakatussa muodossa sekä tallentamalla selaimen luoman tavukoodin välimuistiin. Nykyaikaisilla sivustoilla koodia päivitetään melko usein, joten välimuisti ratkaisee ongelman vain osittain. WebAssembly voisi olla ratkaisu, mutta se vaatii selkeää koodin kirjoittamista, eikä se sovellu hyvin olemassa olevan JavaScript-koodin käsittelyn nopeuttamiseen.

Toinen vaihtoehto on toimittaa valmiita käännettyjä tavukoodeja JavaScript-komentosarjojen sijaan, mutta selainmoottorien kehittäjät vastustavat sitä, koska kolmannen osapuolen tavukoodin varmentaminen on vaikeaa, sen suora käsittely voi johtaa Webin kerrostumiseen, lisätietoturvariskejä syntyy ja tarvitaan yleinen tavukoodimuoto.

BinaryASTin avulla voit sopia nykyiseen koodinkehitys- ja toimitusmalliisi luomatta uutta tavukoodia tai vaihtamatta JavaScript-kieltä. BinaryAST-muodossa olevien tietojen koko on verrattavissa pakattuun minimoituun JavaScript-koodiin, ja käsittelynopeus eliminoimalla lähdetekstin jäsennysvaiheen kasvaa huomattavasti. Lisäksi muoto mahdollistaa käännöksen tavukoodauksen, kun BinaryAST ladataan, odottamatta kaikkien tietojen valmistumista. Lisäksi palvelinpuolen jäsennys mahdollistaa käyttämättömien toimintojen ja tarpeettoman koodin poissulkemisen palautetusta BinaryAST-esityksestä, mikä selainpuolella jäsennettäessä tuhlaa aikaa sekä jäsentämiseen että tarpeettoman liikenteen välittämiseen.

BinaryASTin ominaisuus on myös kyky palauttaa luettava JavaScript, joka ei ole täsmälleen sama kuin alkuperäinen versio, mutta on semanttisesti vastaava ja sisältää samat muuttujien ja funktioiden nimet (BinaryAST tallentaa nimet, mutta ei tallenna tietoja paikoista koodi, muotoilu ja kommentit). Kolikon toinen puoli on uusien hyökkäysvektoreiden ilmaantuminen, mutta ne ovat kehittäjien mukaan paljon pienempiä ja paremmin hallittavissa kuin käytettäessä vaihtoehtoja, kuten tavukoodijakelua.

facebook.com-koodin testit osoittivat, että JavaScriptin jäsentäminen kuluttaa 10-15 % suorittimen resursseista ja jäsentäminen vie enemmän aikaa kuin tavukoodin ja alkukoodin luominen JIT:tä varten. SpiderMonkey-moottorissa AST:n täydellinen rakentamiseen kuluu 500-800 ms, ja BinaryAST:n käyttö on vähentänyt tätä lukua 70-90%.
Yleisesti ottaen useimmissa web-ilotulitioissa, kun käytetään BinaryASTia, JavaScript-jäsennysaika lyhenee 3-10 % tilassa ilman optimointia ja 90-97 %, kun käyttämättömien toimintojen huomioimatta jättäminen on käytössä.
Kun suoritettiin 1.2 megatavun JavaScript-testisarja, BinaryAST:n käyttö antoi käynnistysajan nopeuttaa 338 ms:sta 314 ms:iin pöytäkonejärjestelmässä (Intel i7) ja 2019:stä 1455 ms:iin mobiililaitteella (HTC One M8).

Lähde: opennet.ru

Lisää kommentti