Facebooki avatud lähtekoodiga Hermes JavaScripti mootor

Facebooki avatud lähtekoodiga kerge JavaScripti mootor Hermes, optimeeritud raamistikul põhinevate rakenduste käitamiseks Reageerima emakeelena Androidi platvormil. Hermese toetus sisseehitatud React Native'is alates tänasest versioonist 0.60.2. Projekt on loodud lahendama probleeme, mis on seotud JavaScripti algsete rakenduste pika käivitusajaga ja märkimisväärse ressursikuluga. Kood kirjutatud keeles C++ ja levitatakse MIT-i litsentsi alusel.

Hermese kasutamise eeliste hulgas on rakenduse käivitusaja lühenemine, mälutarbimise vähenemine ja rakenduse mahu vähenemine. V8 kasutamisel on kõige aeganõudvamad etapid lähtekoodi sõelumise ja selle käigu pealt kompileerimise etapid. Hermes viib need etapid koostamisetappi ja võimaldab rakendusi tarnida kompaktse ja tõhusa baitkoodi kujul.

Rakenduse vahetuks täitmiseks kasutatakse projekti raames välja töötatud virtuaalmasinat koos SemiSpace prügikogujaga, mis jagab plokke ainult vastavalt vajadusele (On-demand), toetab plokkide teisaldamist ja defragmentimist, vabanenud mälu tagastamist operatsioonisüsteemile, ilma perioodiliselt kogu hunniku sisu skannimine.

JavaScripti töötlemine on jagatud mitmeks etapiks. Esiteks sõelutakse lähtetekstid ja genereeritakse koodi vahepealne esitus (Hermes IR), esituse põhjal S.S.A. (Staatiline üksikülesanne). Järgmisena töödeldakse vahepealset esitust optimeerijas, mis rakendab staatilise optimeerimise tehnikaid, et muuta esmane vahekood tõhusamaks vaheesitluseks, säilitades samal ajal programmi algse semantika. Viimases etapis genereeritakse registreeritud virtuaalmasina baitkood.

Mootoris toetab osa ECMAScript 2015 JavaScripti standardist (lõppeesmärk on seda täielikult toetada) ja tagab ühilduvuse enamiku olemasolevate React Native rakendustega. Hermes on otsustanud mitte toetada eval() kohalikku täitmist koos avalduste, peegelduse (Reflect ja Proxy), Intl API ja mõnede RegExpi lippudega. Hermese lubamiseks React Native'i rakenduses lisage projektile suvand "enableHermes: true". Hermes on võimalik ehitada ka CLI-režiimis, mis võimaldab teil käsurealt käivitada suvalisi JavaScripti faile. Silumiseks on saadaval laisk kompileerimisrežiim, mis võimaldab arendusprotsessi käigus mitte iga kord JavaScripti kompileerida, vaid genereerida baitkoodi käigu pealt juba seadmes.

Samas ei plaani Facebook Hermest kohandada Node.js-i ja muude lahenduste jaoks, keskendudes ainult mobiilirakendustele (AOT-i koostamine JIT-i asemel on kõige optimaalsem mobiilsüsteemide kontekstis, millel on piiratud RAM ja aeglasem Flash). Esialgne jõudluse testimine, mille viisid läbi Microsofti töötajad paljastaset Hermese kasutamisel muutub Microsoft Office'i rakendus Androidile kasutamiseks kättesaadavaks 1.1 sekundiga. peale käivitamist ja kulutab 21.5MB RAM-i, samas kui V8 mootorit kasutades kulub käivitumiseks 1.4 sekundit ja mälukulu on 30MB.

Lisa: Facebook avaldatud enda testi tulemused. Kasutades Hermesit rakendusega MatterMost, vähenes tööks saadavuse algusaeg (TTI, Time To Interact) 4.30 sekundilt 2.01 sekundile, APK paketi suurus vähenes 41-lt 22 MB-le ja mälukulu 185-lt 136-le. MB.

Allikas: opennet.ru

Lisa kommentaar