Cloudflare, Mozilla und Facebook entwickeln BinaryAST, um das Laden von JavaScript zu beschleunigen.

Ingenieure von Cloudflare, Mozilla, Facebook und Bloomberg haben neues Format BinaryAST zum Beschleunigen der Lieferung und Verarbeitung von JavaScript-Code beim Öffnen von Websites im Browser. BinaryAST verlagert die Parsing-Phase auf den Server und liefert bereits ein formatiertes abstraktes Syntaxbaum (AST). Beim Erhalt von BinaryAST kann der Browser sofort zur Kompilierungsphase ĂŒbergehen und das Parsen des Quell-JavaScripts ĂŒberspringen.

FĂŒr Tests wurde vorbereitet die Referenzimplementierung, die unter der MIT-Lizenz bereitgestellt wird. Zum Parsen werden Komponenten von Node.js verwendet, wĂ€hrend der Code zur Optimierung und Erstellung des AST in Rust geschrieben ist. Die UnterstĂŒtzung fĂŒr
BinaryAST ist bereits in nĂ€chtlichen Builds Firefox verfĂŒgbar. Der Encoder in BinaryAST kann sowohl auf der Ebene der Werkzeugkette der Zielwebsite als auch zur Verpackung von Scripts externer Websites auf der Proxy- oder Content Delivery Network-Seite verwendet werden. Der Standardisierungsprozess von BinaryAST durch die Arbeitsgruppe ECMA TC39, hat bereits begonnen, nach dessen Abschluss wird das Format neben bestehenden Methoden zur Kompression der ausgegebenen Inhalte wie gzip und brotli koexistieren können.

Cloudflare, Mozilla und Facebook entwickeln BinaryAST, um das Laden von JavaScript zu beschleunigen.

Cloudflare, Mozilla und Facebook entwickeln BinaryAST, um das Laden von JavaScript zu beschleunigen.

Ein erheblicher Teil der Zeit, die zur Verarbeitung von JavaScript benötigt wird, entfĂ€llt auf das Laden und Parsen des Codes. Angesichts der Tatsache, dass das Volumen des geladenen JavaScripts auf vielen beliebten Websites fast 10 MB erreicht (zum Beispiel LinkedIn – 7,2 MB, Facebook – 7,1 MB, Gmail – 3,9 MB) verursacht die anfĂ€ngliche Verarbeitung von JavaScript erhebliche Verzögerungen. Die Parsing-Phase im Browser wird zudem dadurch verlangsamt, dass ein vollstĂ€ndiger AST nicht „on-the-fly“ aufgebaut werden kann, wĂ€hrend der Code geladen wird (der Browser muss auf den Abschluss des Ladens von Codeblöcken warten, zum Beispiel das Ende von Funktionen, um fehlende Informationen fĂŒr das Parsen der aktuellen Elemente zu erhalten).

Teilweise wird versucht, das Problem durch die Verbreitung von Code in minimierter und komprimierter Form sowie durch das Caching von generiertem Bytecode im Browser zu lösen. Auf modernen Websites wird der Code recht hÀufig aktualisiert, daher löst das Caching das Problem nur teilweise. Eine Lösung könnte WebAssembly sein, jedoch erfordert es die Verwendung von expliziter Typisierung im Code und ist schlecht geeignet zur Beschleunigung der Verarbeitung bereits bestehenden JavaScripts.

Eine andere Möglichkeit ist die Lieferung von bereit kompilierter Bytecode anstelle von JavaScript-Skripten, aber die Entwickler von Browser-Engines lehnen dies ab, da Dritthersteller-Bytecode schwer zu verifizieren ist, seine direkte Verarbeitung zu einer Fragmentierung des Webs fĂŒhren kann und zusĂ€tzliche Sicherheitsbedrohungen entstehen. Außerdem ist die Entwicklung eines universellen Bytecode-Formats erforderlich.

BinaryAST fĂŒgt sich in das aktuelle Modell der Entwicklung und Bereitstellung von Code ein, ohne neue Bytecodes zu schaffen und ohne die Programmiersprache JavaScript zu Ă€ndern. Die Datenmenge im BinaryAST-Format ist mit komprimiertem, minifiziertem JavaScript-Code vergleichbar, und die Verarbeitungszeit wird durch den Wegfall der Parsing-Phase der Quelltexte erheblich verkĂŒrzt. Zudem ermöglicht das Format, die Kompilierung zu Bytecode wĂ€hrend des Ladens von BinaryAST durchzufĂŒhren, ohne auf den Abschluss der DatenĂŒbertragung zu warten. DarĂŒber hinaus erlaubt das Parsing auf der Serverseite das Herausnehmen nicht verwendeter Funktionen und ĂŒberflĂŒssigen Codes aus der gelieferten Darstellung von BinaryAST, fĂŒr die bei einem Parsing auf der Client-Seite Zeit sowohl fĂŒr die Analyse als auch fĂŒr die Übertragung ĂŒberflĂŒssigen Datenverkehrs aufgewendet wird.

Eine Besonderheit von BinaryAST ist auch die Möglichkeit, lesbaren JavaScript-Code wiederherzustellen, der nicht eins zu eins mit der Originalversion ĂŒbereinstimmt, sondern semantisch Ă€quivalent ist und dieselben Variablen- und Funktionsnamen enthĂ€lt (BinaryAST speichert die Namen, behĂ€lt jedoch keine Informationen ĂŒber Positionen im Code, Formatierungen oder Kommentare). Auf der anderen Seite entstehen neue Angriffsvektoren, aber laut den Entwicklern sind diese erheblich geringer und besser kontrollierbar als bei der Anwendung von Alternativen wie der Verbreitung von Bytecode.

Code-Tests von facebook.com haben gezeigt, dass fĂŒr das Parsing von JavaScript 10-15 % der CPU-Ressourcen aufgewendet werden und das Parsing mehr Zeit in Anspruch nimmt als die Generierung von Bytecode und die anfĂ€ngliche Codeerstellung fĂŒr JIT. Im SpiderMonkey-Engine dauert der gesamte Aufbau des AST 500-800 ms, und die Anwendung von BinaryAST hat es ermöglicht, diesen Wert um 70-90 % zu reduzieren.
Insgesamt wird die Zeit fĂŒr das Parsen von JavaScript bei den meisten Web-Frameworks mit der Anwendung von BinaryAST um 3-10 % im nicht optimierten Modus und um 90-97 % im Modus zur Ignorierung nicht verwendeter Funktionen verkĂŒrzt.
Bei der AusfĂŒhrung eines Test-JavaScript-Sets mit einer GrĂ¶ĂŸe von 1,2 MB ermöglichte die Anwendung von BinaryAST, die Startzeit von 338 ms auf 314 ms auf einem Desktop-System (Intel i7) und von 2019 ms auf 1455 ms auf einem mobilen GerĂ€t (HTC One M8) zu beschleunigen.

Quelle: opennet.ru

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster