JavaScriptový engine Hermes s otevřeným zdrojem Facebooku

Facebook open source lehký JavaScript engine Hermes, optimalizované pro běh aplikací založených na frameworku Reagujte nativní na platformě Android. Podpora Hermes vestavěný v React Native počínaje dnešním vydáním 0.60.2. Projekt je navržen tak, aby řešil problémy s dlouhými dobami spouštění nativních aplikací JavaScript a značnou spotřebou zdrojů. Kód napsáno v C++ a distribuován pod licencí MIT.

Mezi výhody používání Hermes patří zkrácení doby spouštění aplikace, snížení spotřeby paměti a zmenšení velikosti aplikace. Při použití V8 jsou časově nejnáročnější fáze fáze analýzy zdrojového kódu a jeho kompilace za chodu. Hermes přináší tyto kroky do fáze sestavení a umožňuje dodávání aplikací ve formě kompaktního a efektivního bajtkódu.

K přímému spouštění aplikace se používá virtuální stroj vyvinutý v rámci projektu se SemiSpace garbage collectorem, který distribuuje bloky pouze podle potřeby (On-demand), podporuje přesouvání a defragmentaci bloků, navrací uvolněnou paměť operačnímu systému bez periodického skenování obsahu celé haldy.

Zpracování JavaScriptu je rozděleno do několika fází. Nejprve se analyzují zdrojové texty a vygeneruje se přechodná reprezentace kódu (Hermes IR), na základě zastoupení SSA (Statické jednotlivé přiřazení). Dále je prostřední reprezentace zpracována v optimalizátoru, který aplikuje dopředné statické optimalizační techniky k transformaci primárního prostředního kódu na efektivnější prostřední reprezentaci při zachování původní sémantiky programu. V poslední fázi se vygeneruje bytecode pro registrovaný virtuální stroj.

V motoru podporováno součástí standardu ECMAScript 2015 JavaScript (konečným cílem je jeho plná podpora) a poskytuje kompatibilitu s většinou existujících aplikací React Native. Hermes se rozhodl nepodporovat místní provádění eval(), s příkazy, reflexe (Reflect a Proxy), Intl API a některé příznaky v RegExp. Chcete-li povolit Hermes v aplikaci React Native, stačí do projektu přidat možnost „enableHermes: true“. Hermes je také možné sestavit v režimu CLI, což vám umožní spouštět libovolné soubory JavaScriptu z příkazového řádku. Pro ladění je k dispozici režim líné kompilace, který vám umožňuje nekompilovat JavaScript pokaždé během procesu vývoje, ale generovat bajtkód za běhu již v zařízení.

Facebook zároveň neplánuje adaptovat Hermes pro Node.js a další řešení, soustředí se pouze na mobilní aplikace (AOT kompilace místo JIT je nejoptimálnější v kontextu mobilních systémů, které mají omezenou RAM a pomalejší Flash). Předběžné testování výkonu prováděné zaměstnanci společnosti Microsoft odhalenože při používání Hermes bude aplikace Microsoft Office pro Android k dispozici za 1.1 sekundy. po spuštění a spotřebuje 21.5 MB RAM, přičemž při použití motoru V8 trvá start 1.4 sekundy a spotřeba paměti je 30 MB.

Doplnění: Facebook zveřejněna výsledky vlastních testů. Při použití Hermes s aplikací MatterMost se doba zahájení dostupnosti pro práci (TTI, Time To Interact) snížila ze 4.30 na 2.01 sekundy, velikost APK balíčku se snížila ze 41 na 22 MB a spotřeba paměti ze 185 na 136 MB.

Zdroj: opennet.ru

Přidat komentář