Facebook open source Hermes JavaScript-engine

Facebook open source lichtgewicht JavaScript-engine Hermes, geoptimaliseerd voor het uitvoeren van applicaties op basis van het framework React Native op het Android-platform. Hermes-ondersteuning ingebouwd in React Native vanaf de release van vandaag 0.60.2. Het project is ontworpen om problemen op te lossen met lange opstarttijden voor native JavaScript-applicaties en een aanzienlijk verbruik van hulpbronnen. Code geschreven in C++ en gedistribueerd onder de MIT-licentie.

Tot de voordelen van het gebruik van Hermes behoren een kortere opstarttijd van applicaties, een afname van het geheugengebruik en een verkleining van de applicatiegrootte. Bij het gebruik van V8 zijn de meest tijdrovende fasen de fasen van het parseren van de broncode en het direct compileren ervan. Hermes brengt deze stappen naar de bouwfase en maakt het mogelijk applicaties te leveren in de vorm van compacte en efficiënte bytecode.

Om de applicatie direct uit te voeren, wordt een binnen het project ontwikkelde virtuele machine gebruikt met de SemiSpace garbage collector, die blokken alleen distribueert als dat nodig is (op aanvraag), het verplaatsen en defragmenteren van blokken ondersteunt en vrijgemaakt geheugen terugstuurt naar het besturingssysteem, zonder periodiek het scannen van de inhoud van de hele hoop.

JavaScript-verwerking is verdeeld in verschillende fasen. Eerst worden de bronteksten ontleed en wordt een tussenweergave van de code gegenereerd (Hermes IR), op basis van de representatie SSA (Statische enkele toewijzing). Vervolgens wordt de tussenrepresentatie verwerkt in een optimizer, die voorwaartse statische optimalisatietechnieken toepast om de primaire tussencode om te zetten in een efficiëntere tussenrepresentatie, terwijl de oorspronkelijke semantiek van het programma behouden blijft. In de laatste fase wordt de bytecode voor de geregistreerde virtuele machine gegenereerd.

In de motor ondersteund door onderdeel van de ECMAScript 2015 JavaScript-standaard (het uiteindelijke doel is om deze volledig te ondersteunen) en biedt compatibiliteit met de meeste bestaande React Native-applicaties. Hermes heeft besloten de lokale uitvoering van eval() niet te ondersteunen, met instructies, reflectie (Reflect en Proxy), Intl API en enkele vlaggen in RegExp. Om Hermes in een React Native-applicatie in te schakelen, voegt u gewoon de optie "enableHermes: true" toe aan het project. Het is ook mogelijk om Hermes in CLI-modus te bouwen, waardoor u willekeurige JavaScript-bestanden vanaf de opdrachtregel kunt uitvoeren. Er is een luie compilatiemodus beschikbaar voor foutopsporing, waardoor u tijdens het ontwikkelingsproces niet elke keer JavaScript hoeft te compileren, maar direct bytecode kunt genereren die al op het apparaat aanwezig is.

Tegelijkertijd is Facebook niet van plan Hermes aan te passen voor Node.js en andere oplossingen, waarbij de nadruk alleen ligt op mobiele applicaties (AOT-compilatie in plaats van JIT is het meest optimaal in de context van mobiele systemen, die een beperkt RAM-geheugen en langzamere Flash hebben). Voorafgaande prestatietests uitgevoerd door Microsoft-medewerkers onthulddat bij gebruik van Hermes de Microsoft Office-applicatie voor Android binnen 1.1 seconde beschikbaar komt voor gebruik. na het opstarten en verbruikt 21.5 MB RAM, terwijl het bij gebruik van de V8-motor 1.4 seconden duurt om te starten en het geheugenverbruik 30 MB bedraagt.

Toevoeging: Facebook gepubliceerd eigen testresultaten. Bij gebruik van Hermes met de MatterMost-applicatie daalde de tijd tot het starten van de beschikbaarheid voor werk (TTI, Time To Interact) van 4.30 naar 2.01 seconden, werd de grootte van het APK-pakket teruggebracht van 41 naar 22 MB en het geheugenverbruik van 185 naar 136 MB.

Bron: opennet.ru

Voeg een reactie