Moteur JavaScript Hermes open source de Facebook

Moteur JavaScript léger et open source de Facebook Hermès, optimisé pour exécuter des applications basées sur le framework Réagir Native sur la plateforme Android. Assistance Hermès intégré dans React Native à partir de la version 0.60.2 d'aujourd'hui. Le projet est conçu pour résoudre les problèmes liés aux longs temps de démarrage des applications JavaScript natives et à une consommation importante de ressources. Code est écrit en C++ et distribué sous licence MIT.

Parmi les avantages de l’utilisation d’Hermes, on retrouve une réduction du temps de démarrage des applications, une diminution de la consommation mémoire et une réduction de la taille des applications. Lors de l'utilisation de la V8, les étapes les plus chronophages sont celles d'analyse du code source et de sa compilation à la volée. Hermes amène ces étapes dès la phase de construction et permet de livrer les applications sous forme de bytecode compact et efficace.

Pour exécuter directement l'application, une machine virtuelle développée dans le cadre du projet est utilisée avec le garbage collector SemiSpace, qui distribue les blocs uniquement selon les besoins (à la demande), prend en charge le déplacement et la défragmentation des blocs, restituant la mémoire libérée au système d'exploitation, sans périodiquement analyser le contenu de l'ensemble du tas.

Le traitement JavaScript est divisé en plusieurs étapes. Tout d'abord, les textes sources sont analysés et une représentation intermédiaire du code est générée (Hermès IR), basé sur la représentation SSA (Affectation unique statique). Ensuite, la représentation intermédiaire est traitée dans un optimiseur, qui applique des techniques d'optimisation statique directe pour transformer le code intermédiaire principal en une représentation intermédiaire plus efficace tout en préservant la sémantique d'origine du programme. Lors de la dernière étape, le bytecode de la machine virtuelle enregistrée est généré.

Dans le moteur soutenu par fait partie de la norme JavaScript ECMAScript 2015 (le but ultime est de la prendre entièrement en charge) et offre une compatibilité avec la plupart des applications React Native existantes. Hermes a décidé de ne pas prendre en charge l'exécution locale de eval(), avec les instructions, la réflexion (Reflect et Proxy), l'API Intl et certains indicateurs dans RegExp. Pour activer Hermes dans une application React Native, ajoutez simplement l'option « EnableHermes : true » au projet. Il est également possible de construire Hermes en mode CLI, vous permettant d'exécuter des fichiers JavaScript arbitraires à partir de la ligne de commande. Un mode de compilation paresseux est disponible pour le débogage, ce qui permet de ne pas compiler JavaScript à chaque fois pendant le processus de développement, mais de générer du bytecode à la volée déjà sur l'appareil.

Dans le même temps, Facebook n'envisage pas d'adapter Hermes pour Node.js et d'autres solutions, se concentrant uniquement sur les applications mobiles (la compilation AOT au lieu de JIT est la plus optimale dans le contexte des systèmes mobiles, qui ont une RAM limitée et un Flash plus lent). Tests de performances préliminaires effectués par les employés de Microsoft a montréque lors de l'utilisation d'Hermes, l'application Microsoft Office pour Android devient disponible en 1.1 seconde. après le démarrage et consomme 21.5 Mo de RAM, tandis que lors de l'utilisation du moteur V8, le démarrage prend 1.4 seconde et la consommation de mémoire est de 30 Mo.

Ajout : Facebook publié propres résultats de tests. Lors de l'utilisation d'Hermes avec l'application MatterMost, le temps de démarrage de la disponibilité pour le travail (TTI, Time To Interact) est passé de 4.30 à 2.01 secondes, la taille du package APK a été réduite de 41 à 22 Mo et la consommation de mémoire de 185 à 136. Mo.

Source: opennet.ru

Ajouter un commentaire