Facebook nyílt forráskódú Hermes JavaScript motor

Facebook nyílt forráskódú, könnyű JavaScript motor Hermész, a keretrendszeren alapuló alkalmazások futtatására optimalizálva React natív Android platformon. Hermes támogatása beépített a React Native-ben a mai 0.60.2-es kiadástól kezdve. A projekt célja, hogy megoldja a natív JavaScript-alkalmazások hosszú indítási idejével és jelentős erőforrás-felhasználásával kapcsolatos problémákat. Kód írta C++ nyelven, és MIT licenc alatt terjesztik.

A Hermes használatának előnyei között szerepel az alkalmazások indítási idejének csökkenése, a memóriafelhasználás és az alkalmazás méretének csökkenése. A V8 használatakor a legidőigényesebb lépések a forráskód elemzése és menet közbeni fordítása. A Hermes ezeket a lépéseket az építési szakaszba hozza, és lehetővé teszi az alkalmazások kompakt és hatékony bájtkód formájában történő szállítását.

Az alkalmazás közvetlen végrehajtásához a projekten belül kifejlesztett virtuális gépet használjuk a SemiSpace szemétgyűjtővel, amely csak szükség szerint osztja el a blokkokat (Igény szerint), támogatja a blokkok mozgatását és töredezettségmentesítését, a felszabadult memória visszaadását az operációs rendszernek, időközönként. a teljes kupac tartalmának szkennelése.

A JavaScript feldolgozás több szakaszra oszlik. Először a forrásszövegeket elemzik, és előállítják a kód köztes reprezentációját (Hermes IR), az ábrázolás alapján SSA (Statikus egyszeri hozzárendelés). Ezután a közbenső reprezentációt egy optimalizáló dolgozza fel, amely előrefelé irányuló statikus optimalizálási technikákat alkalmaz az elsődleges köztes kód hatékonyabb közbülső reprezentációjává történő átalakítására, miközben megőrzi a program eredeti szemantikáját. Az utolsó szakaszban létrejön a regisztrált virtuális gép bájtkódja.

A motorban támogatta része az ECMAScript 2015 JavaScript szabványnak (a végső cél annak teljes körű támogatása), és kompatibilitást biztosít a legtöbb létező React Native alkalmazással. A Hermes úgy döntött, hogy nem támogatja az eval() helyi végrehajtását utasításokkal, tükrözéssel (Reflect és Proxy), Intl API-val és néhány jelzővel a RegExpben. A Hermes engedélyezéséhez egy React Native alkalmazásban csak adja hozzá az „enableHermes: true” opciót a projekthez. A Hermes CLI módban is felépíthető, így tetszőleges JavaScript-fájlokat futtathat a parancssorból. Hibakeresésre egy lusta fordítási mód áll rendelkezésre, ami lehetővé teszi, hogy a fejlesztés során ne fordítsunk minden alkalommal JavaScriptet, hanem már az eszközön, menet közben generáljunk bájtkódot.

Ugyanakkor a Facebook nem tervezi a Hermes adaptálását a Node.js-hez és más megoldásokhoz, csak a mobilalkalmazásokra koncentrál (a JIT helyett az AOT fordítás a legoptimálisabb a korlátozott RAM-mal és lassabb Flash-vel rendelkező mobilrendszerek esetében). Előzetes teljesítménytesztet a Microsoft alkalmazottai végeztek kiderülthogy a Hermes használatakor 1.1 másodperc alatt elérhetővé válik a Microsoft Office for Android alkalmazás. indítás után és 21.5 MB RAM-ot fogyaszt, míg a V8-as motor használatakor 1.4 másodpercig tart az indítás és a memóriafogyasztás 30 MB.

Kiegészítés: Facebook közzétett saját vizsgálati eredmények. A Hermes MatterMost alkalmazással való használatakor a munkához való rendelkezésre állás megkezdésének ideje (TTI, Time To Interact) 4.30-ról 2.01 másodpercre csökkent, az APK-csomag mérete 41-ről 22 MB-ra, a memóriafogyasztás pedig 185-ről 136-ra csökkent. MB.

Forrás: opennet.ru

Hozzászólás