Cloudflare, Mozilla en Facebook ontwikkel BinaryAST om JavaScript-laai te bespoedig

Ingenieurs van Cloudflare, Mozilla, Facebook en Bloomberg aangebied nuwe formaat binaryAST om die aflewering en verwerking van JavaScript-kode te bespoedig wanneer werwe in 'n blaaier oopgemaak word. BinaryAST skuif die ontledingsfase na die bedienerkant en verskaf 'n reeds gegenereerde abstrakte sintaksisboom (AST). By ontvangs van 'n BinaryAST, kan die blaaier onmiddellik voortgaan na die samestellingstadium, deur die ontleding van die JavaScript-bronkode te omseil.

Vir toetsing voorberei verwysingsimplementering verskaf onder die MIT-lisensie. Node.js-komponente word vir ontleding gebruik, en die kode vir optimalisering en AST-generering is in Rust geskryf. Blaaier-kant ondersteuning
BinaryAST is reeds beskikbaar in nag byeenkoms Firefox. Die enkodeerder in BinaryAST kan beide op die eindwerf gereedskapvlak gebruik word en vir die verpakking van skrifte van eksterne webwerwe aan die kant van 'n instaanbediener of inhoudafleweringsnetwerk. Tans het die proses van standaardisering van BinaryAST deur die werkgroep reeds begin ECMA TC39, waarna die formaat saam met bestaande inhoudkompressiemetodes, soos gzip en brotli, sal kan bestaan.

Cloudflare, Mozilla en Facebook ontwikkel BinaryAST om JavaScript-laai te bespoedig

Cloudflare, Mozilla en Facebook ontwikkel BinaryAST om JavaScript-laai te bespoedig

Wanneer JavaScript verwerk word, word 'n aansienlike hoeveelheid tyd in die laai- en ontleedfase van die kode spandeer. As in ag geneem word dat die volume van afgelaaide JavaScript op baie gewilde webwerwe naby aan 10 MB is (byvoorbeeld vir LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), stel die aanvanklike verwerking van JavaScript 'n aansienlike vertraging in. Die ontledingstadium aan die blaaierkant word ook vertraag as gevolg van die onvermoë om die AST ten volle te bou terwyl die kode gelaai word (die blaaier moet wag vir kodeblokke om die laai te voltooi, soos die einde van funksies, om te verkry die inligting wat ontbreek om die huidige elemente te ontleed).

Hulle probeer om die probleem gedeeltelik op te los deur die kode in 'n geminimaliseerde en saamgeperste vorm te versprei, sowel as deur die gegenereerde greepkode deur die blaaier te kas. Op moderne webwerwe word die kode redelik gereeld opgedateer, so caching los die probleem net gedeeltelik op. WebAssembly kan 'n oplossing wees, maar dit vereis eksplisiete intik van die kode en is nie goed geskik om die verwerking van bestaande JavaScript-kode te bespoedig nie.

Nog 'n opsie is om klaargemaakte saamgestelde greepkode in plaas van JavaScript-skrifte te lewer, maar blaaier-enjinontwikkelaars is daarteen omdat derdeparty-greepkode moeilik is om te verifieer, die direkte verwerking daarvan kan lei tot webstratifikasie, bykomende sekuriteitsrisiko's ontstaan, en die ontwikkeling van 'n universele greepkode-formaat word vereis.

BinaryAST laat jou toe om by jou huidige kode-ontwikkelings- en afleweringsmodel in te pas sonder om nuwe greepkode te skep of die JavaScript-taal te verander. Die grootte van data in die BinaryAST-formaat is vergelykbaar met saamgeperste verkleinde JavaScript-kode, en die verwerkingspoed deur die uitskakeling van die bronteks-ontledingsfase neem merkbaar toe. Boonop laat die formaat samestelling toe om bytekode te maak soos BinaryAST gelaai word, sonder om te wag vir alle data om te voltooi. Daarbenewens laat ontleding aan die bedienerkant jou toe om ongebruikte funksies en onnodige kode uit te sluit van die teruggekeerde BinaryAST-voorstelling, wat, wanneer jy aan die blaaierkant ontleed, tyd mors met die ontleed en die oordrag van onnodige verkeer.

'n Kenmerk van BinaryAST is ook die vermoë om leesbare JavaScript te herstel wat nie presies dieselfde is as die oorspronklike weergawe nie, maar semanties ekwivalent is en dieselfde name van veranderlikes en funksies insluit (BinaryAST stoor name, maar stoor nie inligting oor posisies in die kode, formatering en opmerkings). Die ander kant van die munt is die opkoms van nuwe aanvalsvektore, maar volgens die ontwikkelaars is hulle baie kleiner en meer beheerbaar as wanneer alternatiewe gebruik word, soos greepkodeverspreiding.

Toetse van die facebook.com-kode het getoon dat die ontleding van JavaScript 10-15% van SVE-hulpbronne verbruik en dat ontleding meer tyd neem as om greepkode en aanvanklike kodegenerering vir JIT te genereer. In die SpiderMonkey-enjin neem die tyd om 'n AST heeltemal te bou 500-800 ms, en die gebruik van BinaryAST het hierdie syfer met 70-90% verminder.
Oor die algemeen, vir die meeste webvuurwerke, wanneer BinaryAST gebruik word, word JavaScript-parseertyd verminder met 3-10% in die modus sonder optimalisering en met 90-97% wanneer die modus van ignorering van ongebruikte funksies geaktiveer is.
Wanneer 'n 1.2 MB JavaScript-toetsstel uitgevoer word, het die gebruik van BinaryAST die opstarttyd toegelaat om van 338 tot 314 ms op 'n rekenaarstelsel (Intel i7) en van 2019 tot 1455 ms op 'n mobiele toestel (HTC One M8) te versnel.

Bron: opennet.ru

Voeg 'n opmerking