Facebook kode irekiko Hermes JavaScript motorra

Facebook kode irekiko JavaScript motor arina Hermes, esparruan oinarritutako aplikazioak exekutatzeko optimizatua Erreakzionatu natiboa Android plataforman. Hermes laguntza barneratua React Native-n, gaurko 0.60.2 bertsioarekin hasita. Proiektua jatorrizko JavaScript aplikazioen abiarazte-denbora luzeak dituzten arazoak konpontzeko eta baliabideen kontsumo garrantzitsuak konpontzeko diseinatuta dago. Kodea egilea: C++-n eta MIT lizentziapean banatuta.

Hermes erabiltzearen abantailen artean, aplikazioak abiarazteko denbora murriztea, memoria-kontsumoa eta aplikazioaren tamaina murriztea daude. V8 erabiltzean, denbora gehien hartzen duten faseak iturburu-kodea analizatzeko eta berehala konpilatzeko faseak dira. Hermes-ek urrats hauek eraikitze fasera eramaten ditu eta aplikazioak bytecode trinko eta eraginkor moduan entregatu ahal izango dira.

Aplikazioa zuzenean exekutatzeko, proiektuaren barruan garatutako makina birtual bat erabiltzen da SemiSpace zabor-biltzailearekin, blokeak behar den moduan bakarrik banatzen dituena (eskaeran), blokeak mugitzea eta desfragmentatzea onartzen duena, askatutako memoria sistema eragilera itzultzen duena, aldizka gabe. pila osoaren edukia eskaneatzea.

JavaScript prozesatzea hainbat fasetan banatzen da. Lehenik eta behin, iturburu-testuak analizatzen dira eta kodearen tarteko irudikapena sortzen da (Hermes IR), irudikapenean oinarrituta SSA (Esleipen bakarra estatikoa). Ondoren, tarteko irudikapena optimizatzaile batean prozesatzen da, zeinak aurrerako optimizazio estatikoko teknikak aplikatzen ditu, tarteko kode primarioa bitarteko irudikapen eraginkorrago batean eraldatzeko, programaren jatorrizko semantika mantenduz. Azken fasean, erregistratutako makina birtualaren byte-kodea sortzen da.

Motorrean euskarria ECMAScript 2015 JavaScript estandarraren parte (azken helburua guztiz onartzea da) eta lehendik dauden React Native aplikazio gehienekin bateragarritasuna eskaintzen du. Hermes-ek eval() tokiko exekuzioa ez onartzea erabaki du, adierazpenekin, hausnarketarekin (Reflect eta Proxy), Intl APIarekin eta RegExp-en bandera batzuekin. React Native aplikazio batean Hermes gaitzeko, gehitu "enableHermes: true" aukera proiektuari. Hermes CLI moduan ere eraiki daiteke, komando lerrotik JavaScript fitxategi arbitrarioak exekutatzeko aukera emanez. Konpilazio modu alferra dago arazketarako, eta horri esker, garapen-prozesuan zehar JavaScript ez konpilatzeko aukera ematen du, baina gailuan dagoeneko bytecode-a berehala sortzeko.

Aldi berean, Facebook-ek ez du Hermes Node.js eta beste irtenbide batzuetarako egokitzeko asmorik, aplikazio mugikorretarako soilik zentratuz (JIT-en ordez AOT konpilazioa da egokiena sistema mugikorren testuinguruan, RAM mugatua eta Flash motelagoa dutenak). Microsoft-eko langileek egindako aurretiazko errendimendu-probak agerianHermes erabiltzean, Android-erako Microsoft Office aplikazioa erabilgarri egongo da 1.1 segundotan erabiltzeko. abiarazi ondoren eta 21.5 MB RAM kontsumitzen ditu, V8 motorra erabiltzean, berriz, 1.4 segundo behar ditu abiarazteko eta memoria-kontsumoa 30 MB-koa da.

Gehigarria: Facebook argitaratu proben emaitzak propioak. Hermes MatterMost aplikazioarekin erabiltzean, lanerako erabilgarritasuna hasteko denbora (TTI, Time To Interact) 4.30etik 2.01 segundora jaitsi zen, APK paketearen tamaina 41 MBtik 22ra murriztu zen eta memoria-kontsumoa 185etik 136ra. MB.

Iturria: opennet.ru

Gehitu iruzkin berria