Facebook malfermfonte Hermes JavaScript-motoro

Facebook malfermfonte malpeza JavaScript-motoro Hermes, optimumigita por ruli aplikojn bazitajn sur la kadro Reagi denaska sur la Android-platformo. Hermes-subteno enkonstruita en React Native komencante kun la hodiaŭa eldono 0.60.2. La projekto estas desegnita por solvi problemojn kun longaj ektempoj por denaskaj JavaScript-aplikoj kaj grava konsumo de rimedoj. Kodo skribita de en C++ kaj distribuita sub la MIT-licenco.

Inter la avantaĝoj de uzado de Hermeso, estas redukto de aplikaĵa lanĉa tempo, malpliigo de memorkonsumo kaj redukto de aplika grandeco. Kiam vi uzas V8, la plej tempopostulaj stadioj estas la stadioj de analizado de la fontkodo kaj kompili ĝin sur la flugo. Hermeso alportas ĉi tiujn paŝojn al la konstrustadio kaj permesas al aplikoj esti liveritaj en la formo de kompakta kaj efika bajtokodo.

Por rekte ekzekuti la aplikaĵon, virtuala maŝino disvolvita ene de la projekto estas uzata kun la rubkolektilo de SemiSpace, kiu distribuas blokojn nur laŭbezone (On-peto), subtenas movon kaj malfragmentadon de blokoj, redonante liberigitan memoron al la operaciumo, sen periode. skanante la enhavon de la tuta amaso.

JavaScript-prilaborado estas dividita en plurajn stadiojn. Unue, la fonttekstoj estas analizitaj kaj meza reprezentado de la kodo estas generita (Hermeso IR), surbaze de la reprezentado S.S.A. (Statika Ununura Tasko). Poste, la meza reprezentantaro estas prilaborita en optimumiganto, kiu aplikas antaŭen senmovajn optimumigajn teknikojn por transformi la primaran mezan kodon en pli efikan mezan reprezentadon konservante la originan semantikon de la programo. En la lasta etapo, la bajtokodo por la registrita virtuala maŝino estas generita.

En la motoro subtenata de parto de la ECMAScript 2015 JavaScript-normo (la finfina celo estas plene subteni ĝin) kaj provizas kongruon kun la plej multaj ekzistantaj React Native-aplikoj. Hermeso decidis ne subteni lokan ekzekuton de eval(), kun deklaroj, reflektado (Reflect kaj Proxy), Intl API kaj kelkaj flagoj en RegExp. Por ebligi Hermes en React Native-aplikaĵo, simple aldonu la opcion "enableHermes: true" al la projekto. Ankaŭ eblas konstrui Hermeson en CLI-reĝimo, permesante al vi ekzekuti arbitrajn JavaScript-dosierojn de la komandlinio. Maldiligenta kompila reĝimo disponeblas por sencimigi, kiu permesas vin ne kompili JavaScript ĉiufoje dum la evoluprocezo, sed generi bajtokodon sur la flugo jam sur la aparato.

Samtempe, Facebook ne planas adapti Hermes por Node.js kaj aliaj solvoj, koncentriĝante nur al moveblaj aplikoj (AOT-kompilo anstataŭ JIT estas plej optimuma en la kunteksto de moveblaj sistemoj, kiuj havas limigitan RAM kaj pli malrapidan Flash). Antaŭa agado-testo farita de Microsoft-dungitoj montriske kiam oni uzas Hermeson, la aplikaĵo de Microsoft Office por Android fariĝas disponebla por uzo en 1.1 sekundoj. post ekfunkciigo kaj konsumas 21.5MB da RAM, dum kiam oni uzas la V8-motoron, ĝi bezonas 1.4 sekundojn por komenci kaj memorkonsumo estas 30MB.

Aldono: Facebook eldonita propraj testrezultoj. Kiam oni uzas Hermes kun la aplikaĵo MatterMost, la tempo por komenci haveblecon por laboro (TTI, Time To Interact) malpliiĝis de 4.30 ĝis 2.01 sekundoj, la grandeco de la APK-pakaĵo reduktiĝis de 41 ĝis 22 MB, kaj memorkonsumo de 185 ĝis 136. MB.

fonto: opennet.ru

Aldoni komenton