Cloudflare, Mozilla a Facebook entwéckelen BinaryAST fir JavaScript Luede ze beschleunegen

Ingenieuren vu Cloudflare, Mozilla, Facebook a Bloomberg proposéiert neit Format binärAST fir d'Liwwerung an d'Veraarbechtung vum JavaScript Code ze beschleunegen wann Dir Siten am Browser opmaacht. BinaryAST bewegt d'Parsingphase op d'Server Säit a liwwert e schonn generéierten abstrakte Syntaxbaum (AST). Wann Dir e BinaryAST kritt, kann de Browser direkt op d'Kompilatiounsstadie weidergoen, andeems de JavaScript Quellcode parséiert.

Fir ze testen virbereet Referenz Implementatioun geliwwert ënner der MIT Lizenz. Node.js Komponente gi fir Parsing benotzt, an de Code fir Optimiséierung an AST Generatioun gëtt a Rust geschriwwen. Browser-Säit Ënnerstëtzung
BinaryAST ass scho verfügbar an Nuecht baut Firefox. Den Encoder am BinaryAST ka souwuel um Enn Site Tooling Niveau benotzt ginn a fir Verpackungsskripte vun externe Siten op der Säit vun engem Proxy oder Inhalt Liwwerung Netzwierk. De Moment ass de Prozess vun der Standardiséierung vu BinaryAST vum Aarbechtsgrupp schonn ugefaang ECMA TC39, no deem d'Format fäeg ass mat existéierende Inhaltkompressiounsmethoden, wéi gzip a brotli, zesummen ze existéieren.

Cloudflare, Mozilla a Facebook entwéckelen BinaryAST fir JavaScript Luede ze beschleunegen

Cloudflare, Mozilla a Facebook entwéckelen BinaryAST fir JavaScript Luede ze beschleunegen

Wann Dir JavaScript veraarbecht, gëtt eng bedeitend Quantitéit un Zäit an der Luede- an Parsingphase vum Code verbruecht. Bedenkt datt de Volume vum erofgeluede JavaScript op ville populäre Siten no bei 10 MB ass (zum Beispill fir LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), féiert déi initial Veraarbechtung vu JavaScript e wesentleche Verspéidung. D'Parsingstadium op der Browser-Säit gëtt och verlangsamt wéinst der Onméiglechkeet fir den AST komplett op der Flucht ze bauen wéi de Code gelueden ass (de Browser muss op Codeblocken waarden fir d'Luede fäerdeg ze maachen, sou wéi d'Enn vun de Funktiounen, fir ze kréien d'Informatioun fehlt fir déi aktuell Elementer ze analyséieren).

Si probéieren de Problem deelweis ze léisen andeems de Code an enger miniméierter a kompriméierter Form verdeelt gëtt, wéi och duerch de Cache vum generéierten Bytecode vum Browser. Op modernen Siten gëtt de Code zimlech dacks aktualiséiert, sou datt de Cache nëmmen deelweis de Problem léist. WebAssembly kéint eng Léisung sinn, awer et erfuerdert explizit Typen am Code an ass net gutt gëeegent fir d'Veraarbechtung vum existente JavaScript Code ze beschleunegen.

Eng aner Optioun ass fäerdeg kompiléiert Bytecode ze liwweren anstatt JavaScript Scripten, awer Browser Engine Entwéckler sinn dogéint well Drëtt Partei Bytecode schwéier z'iwwerpréiwen ass, seng direkt Veraarbechtung kann zu Webstratifikatioun féieren, zousätzlech Sécherheetsrisiken entstinn, an d'Entwécklung vun en universellen Bytecode-Format ass erfuerderlech.

BinaryAST erlaabt Iech an Ären aktuellen Code Entwécklung a Liwwermodell ze passen ouni neie Bytecode ze kreéieren oder d'JavaScript Sprooch z'änneren. D'Gréisst vun den Donnéeën am BinaryAST Format ass vergläichbar mat kompriméierte minifizéierten JavaScript Code, an d'Veraarbechtungsgeschwindegkeet andeems d'Quelltext Parsing Phase eliminéiert gëtt erhéicht merkbar. Zousätzlech erlaabt d'Format d'Kompilatioun op Bytecode wéi BinaryAST gelueden ass, ouni ze waarden bis all Daten fäerdeg sinn. Zousätzlech erlaabt d'Parsing op der Serversäit Iech onbenotzt Funktiounen an onnéideg Code aus der zréckginn BinaryAST Representatioun auszeschléissen, déi, wann Dir op der Browser Säit parséiert, Zäit verschwenden souwuel d'Parsing an d'Transmissioun vun onnéidege Verkéier.

Eng Feature vu BinaryAST ass och d'Fäegkeet fir liesbar JavaScript ze restauréieren déi net genau d'selwecht ass wéi d'Originalversioun, awer semantesch gläichwäerteg ass an déiselwecht Nimm vu Variablen a Funktiounen enthält (BinaryAST späichert Nimm, awer späichert keng Informatioun iwwer Positiounen an der Code, Formatéierung a Kommentaren). Déi aner Säit vun der Mënz ass d'Entstoe vun neien Attackvektoren, awer no den Entwéckler si se vill méi kleng a méi kontrolléierbar wéi wann Dir Alternativen benotzt, wéi Bytecode Verdeelung.

Tester vum facebook.com Code hunn gewisen datt Parsing JavaScript 10-15% vun CPU Ressourcen verbraucht an d'Parsing méi Zäit hëlt wéi d'Bytecode an d'initial Code Generatioun fir JIT generéieren. Am SpiderMonkey Motor hëlt d'Zäit fir en AST komplett ze bauen 500-800 ms, an d'Benotzung vu BinaryAST huet dës Figur ëm 70-90% reduzéiert.
Am Allgemengen, fir déi meescht Web-Feierwierker, wann Dir BinaryAST benotzt, gëtt d'JavaScript-Parsingzäit ëm 3-10% am Modus ouni Optimiséierung reduzéiert an ëm 90-97% wann de Modus vun der ignoréierter onbenotzten Funktiounen aktivéiert ass.
Wann Dir e 1.2 MB JavaScript Testset leeft, huet d'Benotzung vun BinaryAST erlaabt datt d'Startzäit vun 338 op 314 ms op engem Desktop System (Intel i7) a vun 2019 op 1455 ms op engem mobilen Apparat (HTC One M8) beschleunegt gëtt.

Source: opennet.ru

Setzt e Commentaire