Facebook open source Hermes JavaScript engine

Facebook open source moteur JavaScript ligeru Hermes, ottimizzatu per eseguisce applicazioni basate nantu à u framework React Native nantu à a piattaforma Android. Supportu Hermes integratu in React Native partendu da a versione 0.60.2 d'oghje. U prughjettu hè pensatu per risolve i prublemi cù lunghi tempi di startup per l'applicazioni JavaScript native è u cunsumu significativu di risorse. Codice scrittu da in C++ è distribuitu sottu a licenza MIT.

Trà i vantaghji di l'usu di Hermes, ci hè una riduzione di u tempu d'iniziu di l'applicazione, una diminuzione di u cunsumu di memoria è una riduzione di a dimensione di l'applicazione. Quandu s'utilice V8, i tappe di più tempu sò i tappe di l'analisi di u codice fonte è a compilazione nantu à a mosca. Hermes porta sti passi à u stadiu di custruzzione è permette l'applicazioni per esse furnite in forma di bytecode compactu è efficiente.

Per eseguisce direttamente l'applicazione, una macchina virtuale sviluppata in u prugettu hè aduprata cù u cullettore di basura SemiSpace, chì distribuisce i blocchi solu cumu necessariu (On-demand), supporta u muvimentu è a defragmentazione di blocchi, rinviendu a memoria liberata à u sistema operatore, senza periodicamente. scanning u cuntenutu di tuttu u munzeddu.

U prucessu JavaScript hè divisu in parechje tappe. Prima, i testi fonti sò analizati è una rappresentazione intermedia di u codice hè generata (Hermes IR), basatu nantu à a rapprisentazione SSA (Assegnazione unica statica). In seguitu, a rapprisintazioni intermediate hè processata in un ottimisatore, chì applicà tecniche di ottimisazione statica in avanti per trasfurmà u codice primariu intermediu in una rapprisintazioni intermediate più efficaci mentre cunservà a semantica originale di u prugramma. À l'ultima tappa, u bytecode per a macchina virtuale registrata hè generata.

In u mutore sustinutu da parte di u standard JavaScript ECMAScript 2015 (l'ultimu scopu hè di sustene completamente) è furnisce a cumpatibilità cù a maiò parte di l'applicazioni React Native esistenti. Hermes hà decisu di ùn sustene micca l'esekzione lucale di eval (), cù dichjarazioni, riflessione (Reflect and Proxy), Intl API è alcune bandiere in RegExp. Per attivà Hermes in una applicazione React Native, aghjunghje l'opzione "enableHermes: true" à u prugettu. Hè ancu pussibule di custruisce Hermes in u modu CLI, chì permette di eseguisce schedarii JavaScript arbitrarii da a linea di cummanda. Un modu di compilazione lazy hè dispunibule per debugging, chì vi permette micca di cumpilà JavaScript ogni volta durante u prucessu di sviluppu, ma di generà bytecode nantu à a mosca digià in u dispusitivu.

À u listessu tempu, Facebook ùn hà micca pensatu à adattà Hermes per Node.js è altre suluzioni, cuncintratu solu nantu à l'applicazioni mobili (a compilazione AOT invece di JIT hè più ottimale in u cuntestu di i sistemi mobili, chì anu RAM limitata è Flash più lento). Test di prestazione preliminare realizatu da l'impiegati Microsoft revelatuchì quandu si usa Hermes, l'applicazione Microsoft Office per Android hè dispunibule per l'usu in 1.1 seconde. dopu à l'iniziu è cunsuma 21.5 MB di RAM, mentre chì quandu si usa u mutore V8, ci vole 1.4 seconde per inizià è u cunsumu di memoria hè di 30 MB.

Addizzioni: Facebook publicatu i risultati di i so test. Quandu si usa Hermes cù l'applicazione MatterMost, u tempu per inizià a dispunibilità per u travagliu (TTI, Time To Interact) hè diminuitu da 4.30 à 2.01 seconde, a dimensione di u pacchettu APK hè ridutta da 41 à 22 MB, è u cunsumu di memoria da 185 à 136. MB.

Source: opennet.ru

Add a comment