JavaScriptový engine Hermes s otvoreným zdrojom na Facebooku

Facebook open source ľahký JavaScript engine Hermes, optimalizované pre spustenie aplikácií založených na frameworku Reagujte Native na platforme Android. Podpora Hermes vstavaný v React Native počnúc dnešným vydaním 0.60.2. Projekt je navrhnutý tak, aby riešil problémy s dlhými časmi spúšťania natívnych aplikácií JavaScript a značnou spotrebou zdrojov. kód napísané v C++ a distribuovaný pod licenciou MIT.

Medzi výhody používania Hermes patrí skrátenie času spúšťania aplikácie, zníženie spotreby pamäte a zmenšenie veľkosti aplikácie. Pri používaní V8 sú časovo najnáročnejšie fázy analýzy zdrojového kódu a jeho kompilácie za chodu. Hermes prináša tieto kroky do fázy zostavovania a umožňuje doručovanie aplikácií vo forme kompaktného a efektívneho bajtkódu.

Na priame spustenie aplikácie sa používa virtuálny stroj vyvinutý v rámci projektu s garbage collectorom SemiSpace, ktorý distribuuje bloky len podľa potreby (On-demand), podporuje presúvanie a defragmentáciu blokov, vracanie uvoľnenej pamäte do operačného systému bez toho, aby sa pravidelne skenovanie obsahu celej haldy.

Spracovanie JavaScriptu je rozdelené do niekoľkých etáp. Najprv sa analyzujú zdrojové texty a vygeneruje sa prechodná reprezentácia kódu (Hermes IR), na základe zastúpenia SSA (Statické jednoduché pridelenie). Ďalej sa prechodná reprezentácia spracuje v optimalizátore, ktorý aplikuje techniky doprednej statickej optimalizácie na transformáciu primárneho prechodného kódu na efektívnejšiu prechodnú reprezentáciu pri zachovaní pôvodnej sémantiky programu. V poslednej fáze sa vygeneruje bajtový kód pre registrovaný virtuálny stroj.

V motore podporovaný súčasťou štandardu ECMAScript 2015 JavaScript (konečným cieľom je jeho plná podpora) a poskytuje kompatibilitu s väčšinou existujúcich aplikácií React Native. Hermes sa rozhodol nepodporovať lokálne vykonávanie eval(), s príkazmi, reflexiou (Reflect a Proxy), Intl API a niektorými príznakmi v RegExp. Ak chcete povoliť Hermes v aplikácii React Native, stačí do projektu pridať možnosť „enableHermes: true“. Hermes je tiež možné zostaviť v režime CLI, čo vám umožní spúšťať ľubovoľné súbory JavaScript z príkazového riadku. Na ladenie je k dispozícii režim lenivej kompilácie, ktorý vám umožňuje nekompilovať JavaScript zakaždým počas procesu vývoja, ale generovať bajtový kód za behu už v zariadení.

Facebook zároveň neplánuje prispôsobovať Hermes pre Node.js a ďalšie riešenia so zameraním len na mobilné aplikácie (AOT kompilácia namiesto JIT je najoptimálnejšia v kontexte mobilných systémov, ktoré majú obmedzenú RAM a pomalší Flash). Predbežné testovanie výkonu vykonávané zamestnancami spoločnosti Microsoft odhaliliže pri používaní Hermes bude aplikácia Microsoft Office pre Android dostupná na použitie za 1.1 sekundy. po spustení a spotrebuje 21.5 MB RAM, pričom pri použití motora V8 trvá štart 1.4 sekundy a spotreba pamäte je 30 MB.

Doplnenie: Facebook publikovaný výsledky vlastných testov. Pri používaní Hermes s aplikáciou MatterMost sa čas spustenia dostupnosti pre prácu (TTI, Time To Interact) znížil zo 4.30 na 2.01 sekundy, veľkosť APK balíka sa znížila zo 41 na 22 MB a spotreba pamäte zo 185 na 136 MB.

Zdroj: opennet.ru

Pridať komentár