„Facebook“ atvirojo kodo „Hermes JavaScript“ variklis

„Facebook“ atvirojo kodo lengvasis „JavaScript“ variklis "Hermes", optimizuotas paleisti programas pagal sistemą Reaguoti native Android platformoje. Hermes palaikymas įmontuotas React Native, pradedant nuo šiandieninės 0.60.2 versijos. Projektas skirtas išspręsti problemas, susijusias su ilgu vietinių „JavaScript“ programų paleidimo laiku ir dideliu išteklių suvartojimu. Kodas parašyta C++ ir platinamas pagal MIT licenciją.

Tarp „Hermes“ naudojimo pranašumų galima paminėti sutrumpėjusį programos paleidimo laiką, sumažėjusį atminties suvartojimą ir programos dydžio sumažinimą. Naudojant V8, daugiausiai laiko atima šaltinio kodo analizavimo ir jo sudarymo etapai. „Hermes“ perkelia šiuos veiksmus į kūrimo etapą ir leidžia programas pateikti kompaktiško ir efektyvaus baitinio kodo pavidalu.

Programai tiesiogiai vykdyti naudojama projekte sukurta virtuali mašina su SemiSpace šiukšlių rinktuvu, kuri paskirsto blokus tik pagal poreikį (pagal pareikalavimą), palaiko blokų perkėlimą ir defragmentavimą, atlaisvintos atminties grąžinimą operacinei sistemai, be periodiškai. nuskaito visos krūvos turinį.

JavaScript apdorojimas yra padalintas į kelis etapus. Pirmiausia išanalizuojami šaltinio tekstai ir sugeneruojamas tarpinis kodo vaizdas (Hermes IR), remiantis atstovavimu S.S.A. (Statiška viena užduotis). Toliau tarpinis vaizdavimas apdorojamas optimizatoriuje, kuris taiko tiesioginio statinio optimizavimo metodus, kad paverstų pirminį tarpinį kodą efektyvesniu tarpiniu vaizdu, išsaugant originalią programos semantiką. Paskutiniame etape sugeneruojamas registruotos virtualios mašinos baito kodas.

Variklyje remia ECMAScript 2015 JavaScript standarto dalis (galutinis tikslas – visapusiškai jį palaikyti) ir užtikrina suderinamumą su dauguma esamų „React Native“ programų. „Hermes“ nusprendė nepalaikyti vietinio „eval(“) vykdymo su teiginiais, atspindžiu („Reflect and Proxy“), „Intl API“ ir kai kuriomis „RegExp“ žymomis. Norėdami įjungti „Hermes“ programoje „React Native“, prie projekto pridėkite parinktį „įgalintiHermes: true“. Taip pat galima sukurti „Hermes“ CLI režimu, leidžiantį paleisti savavališkus „JavaScript“ failus iš komandinės eilutės. Derinimui galimas tingus kompiliavimo režimas, leidžiantis nekompiliuoti JavaScript kiekvieną kartą kūrimo proceso metu, o generuoti baitinį kodą skrydžio metu jau įrenginyje.

Tuo pačiu Facebook neplanuoja pritaikyti Hermes Node.js ir kitiems sprendimams, orientuojantis tik į mobiliąsias aplikacijas (AOT kompiliacija vietoj JIT yra optimaliausia mobiliųjų sistemų kontekste, kurios turi ribotą RAM ir lėtesnę Flash). Preliminarus našumo testavimas, kurį atliko Microsoft darbuotojai parodėkad naudojant „Hermes“, „Microsoft Office“ programa, skirta „Android“, tampa prieinama per 1.1 sekundės. po paleidimo ir sunaudoja 21.5 MB RAM, o naudojant V8 variklį, užtenka 1.4 sekundės, o atminties suvartojimas yra 30 MB.

Papildymas: Facebook paskelbti savo testo rezultatus. Naudojant „Hermes“ su „MatterMost“ programa, laikas iki pasiekiamumo darbui pradžios (TTI, „Time To Interact“) sumažėjo nuo 4.30 iki 2.01 sekundės, APK paketo dydis sumažėjo nuo 41 iki 22 MB, o atminties suvartojimas nuo 185 iki 136 MB.

Šaltinis: opennet.ru

Добавить комментарий