Cloudflare, Mozilla en Facebook ûntwikkelje BinaryAST om JavaScript-laden te fersnellen

Yngenieurs fan Cloudflare, Mozilla, Facebook en Bloomberg oanbean nij formaat binaryAST om de levering en ferwurking fan JavaScript-koade te rapperjen by it iepenjen fan siden yn in browser. BinaryAST ferpleatst de parsearfaze nei de serverkant en leveret in al oanmakke abstrakte syntaksisbeam (AST). By it ûntfangen fan in BinaryAST kin de blêder fuortdaliks trochgean nei it kompilaasjestadium, troch it parsearjen fan 'e JavaScript-boarnekoade om te gean.

Foar testen taret referinsje ymplemintaasje levere ûnder de MIT lisinsje. Node.js komponinten wurde brûkt foar parsing, en de koade foar optimalisaasje en AST generaasje is skreaun yn Rust. Stipe foar browserside
BinaryAST is al beskikber yn nightly builds Firefox. De encoder yn BinaryAST kin brûkt wurde sawol op it einside-arknivo as foar it ferpakken fan skripts fan eksterne siden oan 'e kant fan in proxy- of ynhâldnetwurk. Op it stuit is it proses fan standerdisearring fan BinaryAST troch de wurkgroep al begon ECMA TC39, wêrnei't it formaat tegearre mei besteande ynhâld kompresje metoaden kin bestean, lykas gzip en brotli.

Cloudflare, Mozilla en Facebook ûntwikkelje BinaryAST om JavaScript-laden te fersnellen

Cloudflare, Mozilla en Facebook ûntwikkelje BinaryAST om JavaScript-laden te fersnellen

By it ferwurkjen fan JavaSkript wurdt in wichtige hoemannichte tiid bestege oan it laden en parsearjen fan 'e koade. Yn betinken nommen dat it folume fan ynladen JavaSkript op in protte populêre siden tichtby 10 MB is (bygelyks foar LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), bringt de earste ferwurking fan JavaSkript in signifikante fertraging yn. It parsingstadium oan 'e blêderkant wurdt ek fertrage troch it ûnfermogen om de AST folslein op 'e flecht te bouwen as de koade wurdt laden (de browser moat wachtsje op koadeblokken om it laden te foltôgjen, lykas it ein fan funksjes, om te krijen de ynformaasje ûntbrekt om de aktuele eleminten te parsearjen).

Se besykje it probleem foar in part op te lossen troch de koade te fersprieden yn in minimalisearre en komprimearre foarm, en ek troch de generearre bytekoade troch de browser te cachen. Op moderne siden wurdt de koade frij faak bywurke, sadat caching it probleem mar foar in part oplost. WebAssembly kin in oplossing wêze, mar it fereasket eksplisyt typen yn 'e koade en is net goed geskikt foar it fersnellen fan de ferwurking fan besteande JavaScript-koade.

In oare opsje is om klearmakke kompilearre bytekoade te leverjen ynstee fan JavaScript-skripts, mar ûntwikkelders fan browsermotoren binne der tsjin, om't bytekoade fan tredden lestich te ferifiearjen is, de direkte ferwurking dêrfan kin liede ta webstratifikaasje, ekstra feiligensrisiko's ûntstean, en de ûntwikkeling fan in universele bytecode-formaat is fereaske.

BinaryAST lit jo passe yn jo hjoeddeistige koadeûntwikkeling en leveringsmodel sûnder nije bytekoade te meitsjen of de JavaScript-taal te feroarjen. De grutte fan gegevens yn it BinaryAST-formaat is te fergelykjen mei komprimearre minifisearre JavaScript-koade, en de ferwurkingssnelheid troch it eliminearjen fan 'e boarnetekst-parsingfaze nimt merkber ta. Derneist lit it formaat kompilaasje ta bytekoade as BinaryAST wurdt laden, sûnder te wachtsjen op alle gegevens om te foltôgjen. Dêrnjonken kinne jo it parsearjen oan 'e serverkant net brûkte funksjes en ûnnedige koade útslute fan' e weromjûne BinaryAST-fertsjintwurdiging, dy't, by it parsearjen op 'e blêderkant, tiid fergrieme mei it parsearjen en it ferstjoeren fan ûnnedich ferkear.

In skaaimerk fan BinaryAST is ek de mooglikheid om lêsbere JavaSkript te herstellen dat net krekt itselde is as de oarspronklike ferzje, mar semantysk lykweardich is en deselde nammen fan fariabelen en funksjes omfettet (BinaryAST bewarret nammen, mar bewarret gjin ynformaasje oer posysjes yn de koade, opmaak en opmerkings). De oare kant fan de munt is it ûntstean fan nije oanfal vectors, mar neffens de ûntwikkelders, se binne folle lytser en mear kontrolearber as by it brûken fan alternativen, lykas bytecode distribúsje.

Tests fan 'e facebook.com-koade lieten sjen dat it parsearjen fan JavaScript 10-15% fan CPU-boarnen ferbrûkt en it parsearjen duorret mear tiid dan it generearjen fan bytekoade en inisjele koadegeneraasje foar JIT. Yn 'e SpiderMonkey-motor nimt de tiid om in AST folslein te bouwen 500-800 ms, en it gebrûk fan BinaryAST hat dizze figuer mei 70-90% fermindere.
Yn 't algemien, foar de measte webfjoerwurk, by it brûken fan BinaryAST, wurdt JavaScript-parsingtiid troch 3-10% yn' e modus sûnder optimisaasje fermindere en troch 90-97% as de modus fan it negearjen fan net brûkte funksjes ynskeakele is.
By it útfieren fan in 1.2 MB JavaScript-testsuite, mei it brûken fan BinaryAST tastien de opstarttiid te fersnellen fan 338 nei 314 ms op in buroblêdsysteem (Intel i7) en fan 2019 nei 1455 ms op in mobyl apparaat (HTC One M8).

Boarne: opennet.ru

Add a comment