Peiriant Hermes JavaScript ffynhonnell agored Facebook

Peiriant JavaScript ysgafn ffynhonnell agored Facebook Hermes, wedi'i optimeiddio ar gyfer rhedeg cymwysiadau yn seiliedig ar y fframwaith React Brodorol ar y platfform Android. Cefnogaeth Hermes adeiledig yn yn React Native gan ddechrau gyda datganiad 0.60.2 heddiw. Mae'r prosiect wedi'i gynllunio i ddatrys problemau gydag amseroedd cychwyn hir ar gyfer cymwysiadau JavaScript brodorol a defnydd sylweddol o adnoddau. CΓ΄d Ysgrifenwyd gan yn C++ ac wedi'i ddosbarthu o dan y drwydded MIT.

Ymhlith manteision defnyddio Hermes, mae gostyngiad yn amser cychwyn y cais, gostyngiad yn y defnydd o gof a gostyngiad ym maint y cais. Wrth ddefnyddio V8, y camau sy'n cymryd mwyaf o amser yw'r camau o ddosrannu'r cod ffynhonnell a'i lunio ar y hedfan. Mae Hermes yn dod Γ’'r camau hyn i'r cam adeiladu ac yn caniatΓ‘u i gymwysiadau gael eu cyflwyno ar ffurf bytecode cryno ac effeithlon.

I weithredu'r cais yn uniongyrchol, defnyddir peiriant rhithwir a ddatblygwyd o fewn y prosiect gyda'r casglwr sbwriel SemiSpace, sy'n dosbarthu blociau yn Γ΄l yr angen yn unig (Ar-alw), yn cefnogi symud a dad-ddarnio blociau, gan ddychwelyd cof wedi'i ryddhau i'r system weithredu, heb o bryd i'w gilydd. sganio cynnwys y domen gyfan.

Rhennir prosesu JavaScript yn sawl cam. Yn gyntaf, mae'r testunau ffynhonnell yn cael eu dosrannu a chynhyrchir cynrychiolaeth ganolraddol o'r cod (Hermes IR), yn seiliedig ar y gynrychiolaeth Mae S.S.A. (Aseiniad Sengl Statig). Nesaf, mae'r gynrychiolaeth ganolraddol yn cael ei phrosesu mewn optimizer, sy'n cymhwyso technegau optimeiddio statig ymlaen i drawsnewid y cod canolradd cynradd yn gynrychiolaeth ganolraddol fwy effeithlon tra'n cadw semanteg wreiddiol y rhaglen. Yn y cam olaf, cynhyrchir y cod byte ar gyfer y peiriant rhithwir cofrestredig.

Yn yr injan gyda chefnogaeth rhan o safon JavaScript ECMAScript 2015 (y nod yn y pen draw yw ei gefnogi'n llawn) ac mae'n darparu cydnawsedd Γ’'r rhan fwyaf o gymwysiadau React Native presennol. Mae Hermes wedi penderfynu peidio Γ’ chefnogi gweithrediad lleol eval(), gyda datganiadau, adlewyrchiad (Myfyrio a Dirprwy), Intl API a rhai baneri yn RegExp. Er mwyn galluogi Hermes mewn cymhwysiad React Native, ychwanegwch yr opsiwn β€œenableHermes: true” i'r prosiect. Mae hefyd yn bosibl adeiladu Hermes yn y modd CLI, sy'n eich galluogi i weithredu ffeiliau JavaScript mympwyol o'r llinell orchymyn. Mae modd llunio diog ar gael ar gyfer dadfygio, sy'n eich galluogi i beidio Γ’ llunio JavaScript bob tro yn ystod y broses ddatblygu, ond i gynhyrchu bytecode ar y hedfan sydd eisoes ar y ddyfais.

Ar yr un pryd, nid yw Facebook yn bwriadu addasu Hermes ar gyfer Node.js ac atebion eraill, gan ganolbwyntio ar gymwysiadau symudol yn unig (mae crynhoad AOT yn lle JIT yn fwyaf optimaidd yng nghyd-destun systemau symudol, sydd Γ’ RAM cyfyngedig a Flash arafach). Profion perfformiad rhagarweiniol a gynhelir gan weithwyr Microsoft datgeluwrth ddefnyddio Hermes, bydd cymhwysiad Microsoft Office ar gyfer Android ar gael i'w ddefnyddio mewn 1.1 eiliad. ar Γ΄l cychwyn ac yn defnyddio 21.5MB o RAM, tra wrth ddefnyddio'r injan V8 mae'n cymryd 1.4 eiliad i ddechrau a defnydd cof yw 30MB.

Ychwanegiad: Facebook cyhoeddi canlyniadau profion eu hunain. Wrth ddefnyddio Hermes gyda'r cais MatterMost, gostyngodd yr amser i ddechrau argaeledd ar gyfer gwaith (TTI, Time To Interact) o 4.30 i 2.01 eiliad, gostyngwyd maint y pecyn APK o 41 i 22 MB, a defnydd cof o 185 i 136 MB.

Ffynhonnell: opennet.ru

Ychwanegu sylw