Motore JavaScript Hermes open source di Facebook

Motore JavaScript leggero open source di Facebook Ermete, ottimizzato per l'esecuzione di applicazioni basate sul framework React Native sulla piattaforma Android. Supporto Hermes integrato in React Native a partire dalla versione 0.60.2 di oggi. Il progetto è progettato per risolvere problemi legati a tempi di avvio lunghi per applicazioni JavaScript native e un consumo significativo di risorse. Codice è scritto in C++ e distribuito sotto licenza MIT.

Tra i vantaggi derivanti dall'utilizzo di Hermes vi è la riduzione dei tempi di avvio delle applicazioni, la diminuzione del consumo di memoria e la riduzione delle dimensioni delle applicazioni. Quando si utilizza V8, le fasi che richiedono più tempo sono le fasi di analisi del codice sorgente e di compilazione al volo. Hermes porta questi passaggi nella fase di creazione e consente di fornire le applicazioni sotto forma di bytecode compatto ed efficiente.

Per eseguire direttamente l'applicazione, viene utilizzata una macchina virtuale sviluppata nell'ambito del progetto con il garbage collector SemiSpace, che distribuisce i blocchi solo quando necessario (On-demand), supporta lo spostamento e la deframmentazione dei blocchi, restituendo la memoria liberata al sistema operativo, senza periodicamente scansionando il contenuto dell'intero heap.

L'elaborazione JavaScript è suddivisa in più fasi. Innanzitutto, i testi di origine vengono analizzati e viene generata una rappresentazione intermedia del codice (Hermes IR), sulla base della rappresentazione SSA (Assegnazione singola statica). Successivamente, la rappresentazione intermedia viene elaborata in un ottimizzatore, che applica tecniche di ottimizzazione statica avanzata per trasformare il codice intermedio primario in una rappresentazione intermedia più efficiente preservando la semantica originale del programma. Nell'ultima fase viene generato il bytecode per la macchina virtuale registrata.

Nel motore supportato parte dello standard JavaScript ECMAScript 2015 (l'obiettivo finale è supportarlo completamente) e fornisce compatibilità con la maggior parte delle applicazioni React Native esistenti. Hermes ha deciso di non supportare l'esecuzione locale di eval(), con istruzioni, riflessione (Reflect e Proxy), Intl API e alcuni flag in RegExp. Per abilitare Hermes in un'applicazione React Native, basta aggiungere l'opzione "enableHermes: true" al progetto. È anche possibile creare Hermes in modalità CLI, consentendo di eseguire file JavaScript arbitrari dalla riga di comando. Per il debug è disponibile una modalità di compilazione lenta, che consente di non compilare JavaScript ogni volta durante il processo di sviluppo, ma di generare bytecode al volo già sul dispositivo.

Allo stesso tempo, Facebook non prevede di adattare Hermes per Node.js e altre soluzioni, concentrandosi solo sulle applicazioni mobili (la compilazione AOT invece di JIT è ottimale nel contesto dei sistemi mobili, che hanno RAM limitata e Flash più lento). Test preliminari delle prestazioni condotti dai dipendenti Microsoft rivelatoche quando si utilizza Hermes, l'applicazione Microsoft Office per Android diventa disponibile per l'uso in 1.1 secondi. dopo l'avvio e consuma 21.5 MB di RAM, mentre quando si utilizza il motore V8 impiega 1.4 secondi per avviarsi e il consumo di memoria è di 30 MB.

Aggiunta: Facebook pubblicato propri risultati dei test. Quando si utilizza Hermes con l'applicazione MatterMost, il tempo di inizio disponibilità per il lavoro (TTI, Time To Interact) è diminuito da 4.30 a 2.01 secondi, la dimensione del pacchetto APK è stata ridotta da 41 a 22 MB e il consumo di memoria da 185 a 136 MB.

Fonte: opennet.ru

Aggiungi un commento