Cloudflare, Mozilla och Facebook utvecklar BinaryAST för att pÄskynda inladdningen av JavaScript.

Ingenjörer frÄn företagen Cloudflare, Mozilla, Facebook och Bloomberg erbjöds ett nytt format BinaryAST för att pÄskynda leveransen och bearbetningen av JavaScript-kod nÀr webbplatser öppnas i webblÀsaren. BinaryAST flyttar syntaxanalysfasen till servern och levererar redan formade abstrakta syntaxtrÀd (AST). NÀr BinaryAST mottas kan webblÀsaren omedelbart gÄ vidare till kompilationssteget, och hoppa över parsen av den ursprungliga JavaScript-koden.

För testning har en referensimplementation som levereras under MIT-licensen. För parsning anvÀnds komponenter frÄn Node.js, och koden för optimering och bildande av AST Àr skriven i Rust. Stöd för
BinaryAST finns redan i nattversioner Firefox. Kodaren i BinaryAST kan anvÀndas bÄde pÄ nivÄ av det slutliga webbplatsverktyget och för att paketera skript frÄn externa webbplatser pÄ proxy- eller innehÄllsleveransnÀtverksidan. Processen för standardisering av BinaryAST har redan pÄbörjats av arbetsgruppen ECMA TC39, efter slutförandet av vilken formatet kan samexistera med befintliga metoder för komprimering av levererat innehÄll, som gzip och brotli.

Cloudflare, Mozilla och Facebook utvecklar BinaryAST för att pÄskynda inladdningen av JavaScript.

Cloudflare, Mozilla och Facebook utvecklar BinaryAST för att pÄskynda inladdningen av JavaScript.

En betydande tidsdel av JavaScript-bearbetningen tar laddnings- och syntaxanalysfasen. Med tanke pÄ att mÀngden nedladdad JavaScript pÄ mÄnga populÀra webbplatser nÀrmar sig 10 MB (till exempel LinkedIn - 7.2MB, Facebook - 7.1MB, Gmail - 3.9MB) bidrar den inledande bearbetningen av JavaScript till betydande fördröjningar. Parsingsteget pÄ webblÀsarsidan fördröjs ocksÄ pÄ grund av oförmÄgan att bygga AST i realtid, nÀr koden laddas (webblÀsaren mÄste vÀnta pÄ att block av kod, till exempel funktionsslut, ska laddas för att fÄ den information som saknas för att analysera aktuella element).

Delvis försöker man lösa problemet genom att distribuera koden i minimerad och komprimerad form, samt genom att cache lagrat bytekod genererat av webblÀsaren. PÄ moderna webbplatser uppdateras koden tillrÀckligt ofta, sÄ caching löser bara delvis problemet. En potentiell lösning skulle kunna vara WebAssembly, men det krÀver anvÀndning av explicit typning i koden och passar dÄligt för att pÄskynda bearbetningen av redan befintlig JavaScript-kod.

Ett annat alternativ Àr att leverera fÀrdigkompilerad bytekod istÀllet för JavaScript-skript, men utvecklarna av webblÀsarmotorer Àr emot det eftersom tredjeparts bytekod Àr svÄr att verifiera, dess direkta bearbetning kan leda till en uppdelning av webben, det uppstÄr ytterligare sÀkerhetshot och det krÀvs utveckling av ett universellt bytekodformat.

BinaryAST gör det möjligt att passa in i den nuvarande modellen för utveckling och leverans av kod utan att skapa en ny bytekod och utan att Àndra sprÄket JavaScript. Datastorleken i BinaryAST-formatet Àr jÀmförbar med komprimerad, minifierad JavaScript-kod, och bearbetningstiden ökar avsevÀrt pÄ grund av att parsning av kÀlltexter utesluts. Dessutom möjliggör formatet kompileringsprocessen till bytekod under inlÀsningen av BinaryAST, utan att vÀnta pÄ att alla data ska vara mottagna. Dessutom gör serverbaserad parsning att onödiga funktioner och överflödig kod kan uteslutas frÄn den presentation som BinaryAST levererar, vilket spara tid bÄde för parsning och överföring av onödig trafik.

En sÀrskild egenskap hos BinaryAST Àr möjligheten att ÄterstÀlla lÀsbar JavaScript som inte Àr identisk med den ursprungliga versionen, men som Àr semantiskt ekvivalent och inkluderar samma variabelnamn och funktioner (BinaryAST bevarar namn, men behÄller inte information om kodens positioner, formatering och kommentarer). Den negativa sidan Àr att nya vektorer för attacker kan uppkomma, men enligt utvecklarna Àr dessa betydligt fÀrre och mer kontrollerbara Àn vid anvÀndning av alternativ, sÄsom spridning av bytekod.

Tester pÄ facebook.com visade att 10-15% av CPU-resurserna spenderas pÄ parsning av JavaScript, och att parsning tar lÀngre tid Àn att generera bytekod och initialt skapa kod för JIT. I SpiderMonkey-motorn tar den totala tiden för att bygga AST 500-800 ms, och anvÀndningen av BinaryAST har gjort det möjligt att minska denna siffra med 70-90%.
Sammanfattningsvis reduceras parsningstiden för JavaScript med 3-10% i lÀget utan optimering och med 90-97% nÀr lÀget för att ignorera oanvÀnda funktioner Àr aktiverat, för de flesta webbramverk vid anvÀndning av BinaryAST.
Vid utförande av ett testset för JavaScript pÄ 1,2 MB, gjorde anvÀndningen av BinaryAST att starttiden kunde minskas frÄn 338 ms till 314 ms pÄ en stationÀr dator (Intel i7) och frÄn 2019 ms till 1455 ms pÄ en mobil enhet (HTC One M8).

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster