Facebook open source Hermes JavaScript engine

Facebookov lagani JavaScript motor otvorenog koda Hermes, optimiziran za pokretanje aplikacija zasnovanih na okviru React Native na Android platformi. Hermes podrška ugrađen u React Native-u počevši od današnjeg izdanja 0.60.2. Projekat je dizajniran da riješi probleme s dugim vremenom pokretanja za izvorne JavaScript aplikacije i značajnom potrošnjom resursa. Kod napisao u C++ i distribuira se pod MIT licencom.

Među prednostima korištenja Hermesa je smanjenje vremena pokretanja aplikacije, smanjenje potrošnje memorije i smanjenje veličine aplikacije. Kada koristite V8, faze koje oduzimaju najviše vremena su faze raščlanjivanja izvornog koda i kompajliranja u hodu. Hermes dovodi ove korake u fazu izrade i omogućava isporuku aplikacija u obliku kompaktnog i efikasnog bajtkoda.

Za direktno izvršavanje aplikacije koristi se virtuelna mašina razvijena u okviru projekta sa sakupljačem smeća SemiSpace, koji distribuira blokove samo po potrebi (On-demand), podržava pomeranje i defragmentaciju blokova, vraćanje oslobođene memorije u operativni sistem, bez periodičnih skeniranje sadržaja cijele hrpe.

JavaScript obrada je podijeljena u nekoliko faza. Prvo se raščlanjuju izvorni tekstovi i generira se međureprezentacija koda (Hermes IR), na osnovu reprezentacije SSA (Statična pojedinačna dodjela). Zatim se srednja reprezentacija obrađuje u optimizatoru, koji primjenjuje tehnike napredne statičke optimizacije da transformiše primarni međukod u efikasniju međureprezentaciju uz očuvanje originalne semantike programa. U posljednjoj fazi, generira se bajt kod za registriranu virtuelnu mašinu.

U motoru podržano od deo ECMAScript 2015 JavaScript standarda (krajnji cilj je da ga u potpunosti podrži) i obezbeđuje kompatibilnost sa većinom postojećih React Native aplikacija. Hermes je odlučio da ne podržava lokalno izvršavanje eval(), sa izjavama, refleksijom (Reflect i Proxy), Intl API-jem i nekim zastavicama u RegExp-u. Da biste omogućili Hermes u React Native aplikaciji, samo dodajte opciju “enableHermes: true” projektu. Takođe je moguće napraviti Hermes u CLI modu, omogućavajući vam da izvršite proizvoljne JavaScript datoteke iz komandne linije. Za otklanjanje grešaka dostupan je režim lenje kompilacije, koji vam omogućava da ne kompajlirate JavaScript svaki put tokom procesa razvoja, već da generišete bajt kod u hodu već na uređaju.

Istovremeno, Facebook ne planira prilagođavanje Hermesa za Node.js i druga rješenja, fokusirajući se samo na mobilne aplikacije (AOT kompilacija umjesto JIT-a je najoptimalnija u kontekstu mobilnih sistema, koji imaju ograničenu RAM memoriju i sporiji Flash). Preliminarno testiranje performansi koje su sproveli zaposleni u Microsoftu otkrivenoda kada koristite Hermes, aplikacija Microsoft Office za Android postaje dostupna za upotrebu za 1.1 sekundu. nakon pokretanja i troši 21.5MB RAM-a, dok je kod korištenja V8 motora potrebno 1.4 sekunde da se pokrene, a potrošnja memorije je 30MB.

Dodatak: Facebook objavljen sopstvene rezultate testa. Prilikom korištenja Hermesa s aplikacijom MatterMost, vrijeme početka dostupnosti za rad (TTI, Time To Interact) smanjeno je sa 4.30 na 2.01 sekundu, veličina APK paketa je smanjena sa 41 na 22 MB, a potrošnja memorije sa 185 na 136 MB.

izvor: opennet.ru

Dodajte komentar