Facebookin avoimen lähdekoodin Hermes JavaScript -moottori

Facebookin avoimen lähdekoodin kevyt JavaScript-moottori Hermes, optimoitu sovellusten suorittamiseen kehyksen perusteella React Native Android-alustalla. Hermesin tuki sisäänrakennettu React Nativessa tämän päivän 0.60.2-julkaisusta alkaen. Projekti on suunniteltu ratkaisemaan ongelmia, jotka liittyvät natiivi JavaScript-sovellusten pitkiin käynnistysaikoihin ja merkittävään resurssien kulutukseen. Koodi kirjoittanut C++:ssa ja jaetaan MIT-lisenssillä.

Hermesin käytön etuja ovat sovelluksen käynnistysajan lyheneminen, muistin kulutuksen väheneminen ja sovelluksen koon pieneneminen. V8:aa käytettäessä eniten aikaa vievät vaiheet ovat lähdekoodin jäsentäminen ja sen kääntäminen lennossa. Hermes tuo nämä vaiheet rakennusvaiheeseen ja mahdollistaa sovellusten toimittamisen kompaktina ja tehokkaana tavukoodina.

Sovelluksen suoraan suorittamiseen käytetään projektin puitteissa kehitettyä virtuaalikonetta SemiSpace roskakeräimen kanssa, joka jakaa lohkoja vain tarpeen mukaan (On-demand), tukee lohkojen siirtämistä ja eheyttämistä, vapautuneen muistin palauttamista käyttöjärjestelmään ilman ajoittain. skannaamalla koko kasan sisällön.

JavaScript-käsittely on jaettu useisiin vaiheisiin. Ensin lähdetekstit jäsennetään ja koodista luodaan väliesitys (Hermes IR), esityksen perusteella SSA (Staattinen yksittäinen tehtävä). Seuraavaksi väliesitys käsitellään optimoijassa, joka soveltaa eteenpäin suuntautuvaa staattista optimointitekniikkaa muuntaakseen ensisijaisen välikoodin tehokkaammaksi väliesitykseen säilyttäen samalla ohjelman alkuperäisen semantiikan. Viimeisessä vaiheessa rekisteröidyn virtuaalikoneen tavukoodi luodaan.

Moottorissa tukema osa ECMAScript 2015 JavaScript -standardia (perimmäisenä tavoitteena on tukea sitä täysin) ja tarjoaa yhteensopivuuden useimpien olemassa olevien React Native -sovellusten kanssa. Hermes on päättänyt olla tukematta eval():n paikallista suorittamista lauseilla, reflektiolla (Reflect ja Proxy), Intl API:lla ja joillakin RegExp-lipuilla. Ota Hermes käyttöön React Native -sovelluksessa lisäämällä "enableHermes: true" -vaihtoehto projektiin. On myös mahdollista rakentaa Hermes CLI-tilassa, jolloin voit suorittaa mielivaltaisia ​​JavaScript-tiedostoja komentoriviltä. Virheenkorjausta varten on saatavilla laiska käännöstila, jonka avulla et käännä JavaScriptiä joka kerta kehitysprosessin aikana, vaan generoi tavukoodin lennossa jo laitteessa.

Samanaikaisesti Facebook ei aio mukauttaa Hermesiä Node.js:lle ja muille ratkaisuille, keskittyen vain mobiilisovelluksiin (AOT-kokoelma JIT:n sijaan on optimaalinen mobiilijärjestelmissä, joissa on rajoitettu RAM ja hitaampi Flash). Microsoftin työntekijöiden suorittama alustava suorituskykytestaus paljastuiettä Hermesiä käytettäessä Microsoft Office -sovellus Androidille tulee käyttöön 1.1 sekunnissa. käynnistyksen jälkeen ja kuluttaa 21.5 Mt RAM-muistia, kun taas V8-moottoria käytettäessä käynnistyminen kestää 1.4 sekuntia ja muistin kulutus on 30 Mt.

Lisäys: Facebook julkaistu omia testituloksia. Käytettäessä Hermesiä MatterMost-sovelluksen kanssa työhön saatavuuden alkamisaika (TTI, Time To Interact) lyheni 4.30 sekunnista 2.01 sekuntiin, APK-paketin koko pieneni 41:stä 22 megatavuun ja muistin kulutus 185:stä 136:een. MB.

Lähde: opennet.ru

Lisää kommentti