Facebook odprtokodni motor Hermes JavaScript

Facebook odprtokodni lahki motor JavaScript Hermes, optimiziran za izvajanje aplikacij, ki temeljijo na ogrodju React Native na platformi Android. Hermesova podpora vgrajeni v React Native, začenši z današnjo izdajo 0.60.2. Projekt je zasnovan za reševanje težav z dolgimi zagonskimi časi za izvorne aplikacije JavaScript in znatno porabo virov. Koda napisal v C++ in se distribuira pod licenco MIT.

Med prednostmi uporabe Hermesa je skrajšanje časa zagona aplikacije, zmanjšanje porabe pomnilnika in zmanjšanje velikosti aplikacije. Pri uporabi V8 sta najbolj zamudni fazi razčlenjevanje izvorne kode in njeno sprotno prevajanje. Hermes prinaša te korake v fazo gradnje in omogoča dostavo aplikacij v obliki kompaktne in učinkovite bajtne kode.

Za neposredno izvajanje aplikacije se uporablja virtualni stroj, razvit v okviru projekta, z zbiralnikom smeti SemiSpace, ki distribuira bloke samo po potrebi (On-demand), podpira premikanje in defragmentacijo blokov, vračanje sproščenega pomnilnika v operacijski sistem, brez periodičnega skeniranje vsebine celotne kopice.

Obdelava JavaScript je razdeljena na več stopenj. Najprej se izvorna besedila razčlenijo in ustvari se vmesna predstavitev kode (Hermes IR), na podlagi reprezentacije SSA (Statična posamezna naloga). Nato se vmesna predstavitev obdela v optimizatorju, ki uporablja napredne statične tehnike optimizacije za preoblikovanje primarne vmesne kode v učinkovitejšo vmesno predstavitev ob ohranjanju izvirne semantike programa. Na zadnji stopnji se ustvari bajtna koda za registriran virtualni stroj.

V motorju podpira del standarda ECMAScript 2015 JavaScript (končni cilj je v celoti podpreti) in zagotavlja združljivost z večino obstoječih aplikacij React Native. Hermes se je odločil, da ne bo podpiral lokalnega izvajanja eval(), s stavki, refleksijo (Reflect in Proxy), Intl API in nekaterimi zastavicami v RegExp. Če želite omogočiti Hermes v aplikaciji React Native, projektu dodajte možnost »enableHermes: true«. Prav tako je možno sestaviti Hermes v načinu CLI, kar vam omogoča izvajanje poljubnih datotek JavaScript iz ukazne vrstice. Za odpravljanje napak je na voljo leni način prevajanja, ki vam omogoča, da ne prevajate JavaScripta vsakič med razvojnim procesom, temveč sproti ustvarjate bajtno kodo že na napravi.

Obenem Facebook ne načrtuje prilagajanja Hermesa za Node.js in druge rešitve, osredotoča se le na mobilne aplikacije (prevajanje AOT namesto JIT je najbolj optimalno v kontekstu mobilnih sistemov, ki imajo omejen RAM in počasnejši Flash). Preliminarno testiranje zmogljivosti, ki so ga izvedli Microsoftovi zaposleni razkrilda ob uporabi Hermesa aplikacija Microsoft Office za Android postane na voljo za uporabo v 1.1 sekunde. po zagonu in porabi 21.5 MB RAM-a, pri uporabi motorja V8 pa zagon traja 1.4 sekunde, poraba pomnilnika pa znaša 30 MB.

Dodatek: Facebook objavljeno lastne rezultate testov. Pri uporabi Hermesa z aplikacijo MatterMost se je čas do začetka razpoložljivosti za delo (TTI, Time To Interact) zmanjšal s 4.30 na 2.01 sekunde, velikost paketa APK se je zmanjšala z 41 na 22 MB, poraba pomnilnika pa s 185 na 136 MB.

Vir: opennet.ru

Dodaj komentar