Facebook atvērtā koda Hermes JavaScript dzinējs

Facebook atvērtā koda vieglais JavaScript dzinējs Hermes, optimizēta lietojumprogrammu palaišanai, pamatojoties uz ietvaru Reaģēt native Android platformā. Hermes atbalsts iebūvēts React Native, sākot ar šodienas versiju 0.60.2. Projekts ir izstrādāts, lai atrisinātu problēmas ar ilgu palaišanas laiku vietējām JavaScript lietojumprogrammām un ievērojamu resursu patēriņu. Kods sarakstījis valodā C++ un izplatīta saskaņā ar MIT licenci.

Starp Hermes izmantošanas priekšrocībām ir lietojumprogrammas palaišanas laika samazināšanās, atmiņas patēriņa samazināšanās un lietojumprogrammas lieluma samazināšanās. Lietojot V8, laikietilpīgākie posmi ir avota koda parsēšanas un tā kompilēšanas posmi. Hermes nodrošina šīs darbības izveides stadijā un ļauj piegādāt lietojumprogrammas kompakta un efektīva baitkoda veidā.

Lietojumprogrammas tiešai izpildei tiek izmantota projekta ietvaros izstrādāta virtuālā mašīna ar SemiSpace atkritumu savācēju, kas sadala blokus tikai pēc nepieciešamības (Pēc pieprasījuma), atbalsta bloku pārvietošanu un defragmentēšanu, atbrīvotās atmiņas atgriešanu operētājsistēmā, periodiski bez skenējot visas kaudzes saturu.

JavaScript apstrāde ir sadalīta vairākos posmos. Pirmkārt, avota teksti tiek parsēti un tiek ģenerēts koda starpposms (Hermes IR), pamatojoties uz attēlojumu SSA (Static Single Asignment). Tālāk starpposma attēlojums tiek apstrādāts optimizētājā, kas izmanto priekšējās statiskās optimizācijas metodes, lai primāro starpkodu pārveidotu efektīvākā starpposma attēlojumā, vienlaikus saglabājot programmas sākotnējo semantiku. Pēdējā posmā tiek ģenerēts reģistrētās virtuālās mašīnas baitkods.

Dzinējā atbalsta ir daļa no ECMAScript 2015 JavaScript standarta (galīgais mērķis ir to pilnībā atbalstīt) un nodrošina saderību ar lielāko daļu esošo React Native lietojumprogrammu. Hermes ir nolēmis neatbalstīt eval () vietējo izpildi ar paziņojumiem, atspoguļojumu (Reflect un Proxy), Intl API un dažiem karodziņus programmā RegExp. Lai iespējotu Hermes lietojumprogrammā React Native, vienkārši pievienojiet projektam opciju “enableHermes: true”. Ir iespējams arī izveidot Hermes CLI režīmā, kas ļauj izpildīt patvaļīgus JavaScript failus no komandrindas. Atkļūdošanai ir pieejams slinks kompilācijas režīms, kas izstrādes procesā ļauj nevis katru reizi kompilēt JavaScript, bet gan lidojumā ģenerēt baitkodu jau ierīcē.

Tajā pašā laikā Facebook neplāno pielāgot Hermes priekš Node.js un citiem risinājumiem, koncentrējoties tikai uz mobilajām aplikācijām (AOT kompilācija JIT vietā ir visoptimālākā mobilo sistēmu kontekstā, kurām ir ierobežota operatīvā atmiņa un lēnāks Flash). Iepriekšēja veiktspējas pārbaude, ko veica Microsoft darbinieki parādījaka, izmantojot Hermes, Microsoft Office lietojumprogramma Android ierīcēm kļūst pieejama lietošanai 1.1 sekundes laikā. pēc palaišanas un patērē 21.5 MB RAM, savukārt, izmantojot V8 dzinēju, iedarbināšana prasa 1.4 sekundes un atmiņas patēriņš ir 30 MB.

Papildinājums: Facebook publicēti pašu testa rezultāti. Izmantojot Hermes ar aplikāciju MatterMost, laiks, lai sāktu pieejamību darbam (TTI, Time To Interact), samazinājās no 4.30 līdz 2.01 sekundei, APK pakotnes izmērs tika samazināts no 41 uz 22 MB, bet atmiņas patēriņš no 185 uz 136 MB.

Avots: opennet.ru

Pievieno komentāru