Facebook open sourced Hermes JavaScript engine

Facebook open sourced lightweight JavaScript engine Hermes, na-optimize para sa pagpapatakbo ng mga application batay sa framework React Native sa Android platform. Suporta ni Hermes built-in sa React Native simula sa 0.60.2 release ngayon. Ang proyekto ay idinisenyo upang malutas ang mga problema sa mahabang oras ng pagsisimula para sa mga native na application ng JavaScript at makabuluhang pagkonsumo ng mapagkukunan. Code nakasulat sa C++ at ipinamahagi sa ilalim ng lisensya ng MIT.

Kabilang sa mga pakinabang ng paggamit ng Hermes, mayroong pagbawas sa oras ng pagsisimula ng application, pagbaba sa pagkonsumo ng memorya at pagbawas sa laki ng aplikasyon. Kapag gumagamit ng V8, ang pinakamatagal na yugto ay ang mga yugto ng pag-parse ng source code at pag-compile nito nang mabilis. Dinadala ni Hermes ang mga hakbang na ito sa yugto ng pagbuo at pinapayagan ang mga application na maihatid sa anyo ng compact at mahusay na bytecode.

Upang direktang maisagawa ang application, ang isang virtual machine na binuo sa loob ng proyekto ay ginagamit kasama ng SemiSpace garbage collector, na namamahagi ng mga bloke lamang kung kinakailangan (On-demand), sumusuporta sa paglipat at defragmentation ng mga bloke, pagbabalik ng napalaya na memorya sa operating system, nang walang pana-panahon. pag-scan sa mga nilalaman ng buong bunton.

Ang pagpoproseso ng JavaScript ay nahahati sa ilang yugto. Una, ang mga pinagmulang teksto ay na-parse at isang intermediate na representasyon ng code ay nabuo (Hermes IR), batay sa representasyon SSA (Static Single Assignment). Susunod, ang intermediate na representasyon ay pinoproseso sa isang optimizer, na nag-aaplay ng forward static optimization techniques upang baguhin ang pangunahing intermediate code sa isang mas mahusay na intermediate na representasyon habang pinapanatili ang orihinal na semantics ng programa. Sa huling yugto, nabuo ang bytecode para sa rehistradong virtual machine.

Sa makina suportado ng bahagi ng ECMAScript 2015 JavaScript standard (ang pinakalayunin ay ganap na suportahan ito) at nagbibigay ng compatibility sa karamihan ng mga kasalukuyang React Native na application. Nagpasya si Hermes na hindi suportahan ang lokal na pagpapatupad ng eval(), na may mga statement, reflection (Reflect at Proxy), Intl API at ilang flag sa RegExp. Upang paganahin ang Hermes sa isang React Native na application, idagdag lamang ang opsyong “enableHermes: true” sa proyekto. Posible rin na bumuo ng Hermes sa CLI mode, na nagpapahintulot sa iyo na magsagawa ng mga arbitrary na JavaScript file mula sa command line. Available ang lazy compilation mode para sa pag-debug, na nagbibigay-daan sa iyong hindi mag-compile ng JavaScript sa bawat oras sa proseso ng pag-develop, ngunit upang makabuo ng bytecode sa mabilisang nasa device na.

Kasabay nito, hindi pinaplano ng Facebook na iakma ang Hermes para sa Node.js at iba pang mga solusyon, na nakatuon lamang sa mga mobile application (ang AOT compilation sa halip na JIT ay pinakamainam sa konteksto ng mga mobile system, na may limitadong RAM at mas mabagal na Flash). Preliminary performance testing na isinagawa ng mga empleyado ng Microsoft ipinahayagna kapag gumagamit ng Hermes, ang Microsoft Office application para sa Android ay magiging available para magamit sa loob ng 1.1 segundo. pagkatapos ng startup at kumonsumo ng 21.5MB ng RAM, habang kapag ginagamit ang V8 engine ay tumatagal ng 1.4 segundo upang magsimula at ang memory consumption ay 30MB.

Dagdag: Facebook lathala sariling resulta ng pagsusulit. Kapag gumagamit ng Hermes sa MatterMost application, ang oras upang simulan ang availability para sa trabaho (TTI, Time To Interact) ay bumaba mula 4.30 hanggang 2.01 segundo, ang laki ng APK package ay nabawasan mula 41 hanggang 22 MB, at memory consumption mula 185 hanggang 136 MB.

Pinagmulan: opennet.ru

Magdagdag ng komento