Open-Source-JavaScript-Engine Hermes von Facebook

Open-Source-leichtgewichtige JavaScript-Engine von Facebook Hermes, optimiert für die Ausführung von Anwendungen, die auf dem Framework basieren React Native auf der Android-Plattform. Hermes-Unterstützung eingebaut in React Native ab der heutigen Version 0.60.2. Das Projekt soll Probleme mit langen Startzeiten für native JavaScript-Anwendungen und erheblichem Ressourcenverbrauch lösen. Code geschrieben ist in C++ und unter der MIT-Lizenz vertrieben.

Zu den Vorteilen der Verwendung von Hermes gehören eine Verkürzung der Startzeit der Anwendung, eine Verringerung des Speicherverbrauchs und eine Verringerung der Anwendungsgröße. Bei der Verwendung von V8 sind die Phasen des Parsens des Quellcodes und seiner On-the-Fly-Kompilierung die zeitaufwändigsten Phasen. Hermes bringt diese Schritte in die Build-Phase und ermöglicht die Bereitstellung von Anwendungen in Form von kompaktem und effizientem Bytecode.

Um die Anwendung direkt auszuführen, wird eine im Rahmen des Projekts entwickelte virtuelle Maschine mit dem SemiSpace-Garbage Collector verwendet, der Blöcke nur nach Bedarf verteilt (On-Demand), das Verschieben und Defragmentieren von Blöcken unterstützt und freigegebenen Speicher ohne periodische Unterbrechungen an das Betriebssystem zurückgibt Scannen des Inhalts des gesamten Heaps.

Die JavaScript-Verarbeitung ist in mehrere Phasen unterteilt. Zunächst werden die Quelltexte geparst und eine Zwischendarstellung des Codes generiert (Hermes IR), basierend auf der Darstellung SSA (Statische Einzelzuweisung). Als nächstes wird die Zwischendarstellung in einem Optimierer verarbeitet, der Techniken der vorwärts gerichteten statischen Optimierung anwendet, um den primären Zwischencode in eine effizientere Zwischendarstellung umzuwandeln und dabei die ursprüngliche Semantik des Programms beizubehalten. Im letzten Schritt wird der Bytecode für die registrierte virtuelle Maschine generiert.

Im Motor unterstützt durch Teil des ECMAScript 2015 JavaScript-Standards (das ultimative Ziel besteht darin, ihn vollständig zu unterstützen) und bietet Kompatibilität mit den meisten vorhandenen React Native-Anwendungen. Hermes hat beschlossen, die lokale Ausführung von eval() mit Anweisungen, Reflektion (Reflect und Proxy), Intl API und einigen Flags in RegExp nicht zu unterstützen. Um Hermes in einer React Native-Anwendung zu aktivieren, fügen Sie einfach die Option „enableHermes: true“ zum Projekt hinzu. Es ist auch möglich, Hermes im CLI-Modus zu erstellen, sodass Sie beliebige JavaScript-Dateien über die Befehlszeile ausführen können. Für das Debuggen steht ein verzögerter Kompilierungsmodus zur Verfügung, der es Ihnen ermöglicht, JavaScript nicht jedes Mal während des Entwicklungsprozesses zu kompilieren, sondern Bytecode im laufenden Betrieb bereits auf dem Gerät zu generieren.

Gleichzeitig plant Facebook nicht, Hermes für Node.js und andere Lösungen anzupassen, sondern konzentriert sich nur auf mobile Anwendungen (AOT-Kompilierung anstelle von JIT ist im Kontext mobiler Systeme mit begrenztem RAM und langsamerem Flash am optimalsten). Vorläufige Leistungstests, durchgeführt von Microsoft-Mitarbeitern zeigtendass bei Verwendung von Hermes die Microsoft Office-Anwendung für Android in 1.1 Sekunden einsatzbereit ist. nach dem Start und verbraucht 21.5 MB RAM, während bei Verwendung der V8-Engine der Start 1.4 Sekunden dauert und der Speicherverbrauch 30 MB beträgt.

Zusatz: Facebook опубликовал eigene Testergebnisse. Bei Verwendung von Hermes mit der MatterMost-Anwendung verringerte sich die Zeit bis zum Beginn der Arbeitsbereitschaft (TTI, Time To Interact) von 4.30 auf 2.01 Sekunden, die Größe des APK-Pakets wurde von 41 auf 22 MB und der Speicherverbrauch von 185 auf 136 reduziert MB.

Source: opennet.ru

Kommentar hinzufügen