Ingeniører fra Cloudflare, Mozilla, Facebook og Bloomberg
Til test
BinaryAST er allerede tilgængelig i
Når JavaScript behandles, bruges en betydelig mængde tid i indlæsnings- og parsingsfasen af koden. I betragtning af, at mængden af downloadet JavaScript på mange populære websteder er tæt på 10 MB (for eksempel for LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), introducerer den indledende behandling af JavaScript en betydelig forsinkelse. Parsing-stadiet på browsersiden er også langsommere på grund af manglende evne til at bygge AST'en fuldt ud, mens koden indlæses (browseren skal vente på kodeblokke for at fuldføre indlæsningen, såsom afslutningen af funktioner, for at opnå den information, der mangler for at parse de aktuelle elementer).
De forsøger delvist at løse problemet ved at distribuere koden i en minimeret og komprimeret form, samt ved at cache den genererede bytekode af browseren. På moderne websteder opdateres koden ret ofte, så caching løser kun delvist problemet. WebAssembly kunne være en løsning, men det kræver eksplicit indtastning af koden og er ikke velegnet til at fremskynde behandlingen af eksisterende JavaScript-kode.
En anden mulighed er at levere færdiglavet kompileret bytekode i stedet for JavaScript-scripts, men udviklere af browsermotorer er imod det, fordi tredjeparts bytekode er svær at verificere, dens direkte behandling kan føre til web-stratificering, yderligere sikkerhedsrisici opstår og udvikling af et universelt bytekodeformat er påkrævet.
BinaryAST giver dig mulighed for at passe ind i din nuværende kodeudviklings- og leveringsmodel uden at oprette ny bytekode eller ændre JavaScript-sproget. Størrelsen af data i BinaryAST-formatet kan sammenlignes med komprimeret minificeret JavaScript-kode, og behandlingshastigheden ved at eliminere kildetekstens parsing-fase øges mærkbart. Derudover tillader formatet kompilering til bytekode, når BinaryAST indlæses, uden at vente på, at alle data er færdige. Derudover giver parsing på serversiden dig mulighed for at udelukke ubrugte funktioner og unødvendig kode fra den returnerede BinaryAST-repræsentation, hvilket, når du parser på browsersiden, spilder tid på både at parse og transmittere unødvendig trafik.
En funktion ved BinaryAST er også evnen til at gendanne læsbar JavaScript, der ikke er helt den samme som den originale version, men er semantisk ækvivalent og indeholder de samme navne på variabler og funktioner (BinaryAST gemmer navne, men gemmer ikke information om positioner i kode, formatering og kommentarer). Den anden side af medaljen er fremkomsten af nye angrebsvektorer, men ifølge udviklerne er de meget mindre og mere kontrollerbare, end når man bruger alternativer, såsom bytekode-distribution.
Test af facebook.com-koden viste, at parsing af JavaScript bruger 10-15 % af CPU-ressourcer, og at parsing tager mere tid end at generere bytekode og indledende kodegenerering til JIT. I SpiderMonkey-motoren tager tiden til fuldstændig opbygning af en AST 500-800 ms, og brugen af BinaryAST har reduceret dette tal med 70-90%.
Generelt for det meste webfyrværkeri, når du bruger BinaryAST, reduceres JavaScript-parsingtiden med 3-10% i tilstanden uden optimering og med 90-97%, når tilstanden til at ignorere ubrugte funktioner er aktiveret.
Når du kørte et 1.2 MB JavaScript-testsæt, tillod brugen af BinaryAST opstartstiden fra 338 til 314 ms på et desktopsystem (Intel i7) og fra 2019 til 1455 ms på en mobilenhed (HTC One M8).
Kilde: opennet.ru