Facebook open sourced Hermes JavaScript engine

Facebook imefungua injini ya JavaScript yenye chanzo chepesi Hermes, iliyoboreshwa kwa ajili ya kuendesha programu kulingana na mfumo React Native kwenye jukwaa la Android. Msaada wa Hermes iliyojengwa ndani katika React Native kuanzia na toleo la leo la 0.60.2. Mradi huu umeundwa kutatua matatizo kwa muda mrefu wa kuanza kwa programu asilia za JavaScript na matumizi makubwa ya rasilimali. Kanuni Imeandikwa na katika C++ na kusambazwa chini ya leseni ya MIT.

Miongoni mwa faida za kutumia Hermes, kuna kupunguzwa kwa muda wa kuanza kwa maombi, kupungua kwa matumizi ya kumbukumbu na kupunguza ukubwa wa maombi. Unapotumia V8, hatua zinazotumia muda mwingi ni hatua za kuchanganua msimbo wa chanzo na kuukusanya kwa kuruka. Hermes huleta hatua hizi kwa hatua ya kujenga na inaruhusu maombi kutolewa kwa njia ya bytecode compact na ufanisi.

Ili kutekeleza ombi moja kwa moja, mashine ya mtandaoni iliyotengenezwa ndani ya mradi inatumiwa na mtoza takataka wa SemiSpace, ambayo inasambaza vizuizi tu inavyohitajika (Inapohitajika), inasaidia kusonga na kugawanyika kwa vizuizi, kurudisha kumbukumbu iliyoachiliwa kwa mfumo wa uendeshaji, bila mara kwa mara. kuchanganua yaliyomo kwenye lundo zima.

Usindikaji wa JavaScript umegawanywa katika hatua kadhaa. Kwanza, maandishi ya chanzo huchanganuliwa na uwakilishi wa kati wa msimbo hutolewa (Hermes IR), kwa kuzingatia uwakilishi SSA (Kazi Moja Iliyotulia). Kisha, uwakilishi wa kati huchakatwa katika kiboreshaji, ambacho hutumika mbele mbinu za uboreshaji tuli ili kubadilisha msimbo wa msingi wa kati kuwa uwakilishi bora wa kati huku ukihifadhi semantiki asili ya programu. Katika hatua ya mwisho, bytecode ya mashine pepe iliyosajiliwa inatolewa.

Katika injini mkono na sehemu ya kiwango cha JavaScript cha ECMAScript 2015 (lengo kuu ni kukiunga mkono kikamilifu) na hutoa uoanifu na programu nyingi zilizopo za React Native. Hermes ameamua kutounga mkono utekelezaji wa ndani wa eval(), kwa taarifa, uakisi (Reflect na Proksi), Intl API na baadhi ya bendera katika RegExp. Ili kuwezesha Hermes katika programu ya React Native, ongeza tu chaguo la "enableHermes: true" kwenye mradi. Inawezekana pia kuunda Hermes katika hali ya CLI, hukuruhusu kutekeleza faili za JavaScript kutoka kwa safu ya amri. Njia ya uvivu ya ujumuishaji inapatikana kwa utatuzi, ambayo hukuruhusu sio kukusanya JavaScript kila wakati wakati wa mchakato wa ukuzaji, lakini kutoa bytecode kwenye kuruka tayari kwenye kifaa.

Wakati huo huo, Facebook haina mpango wa kurekebisha Hermes kwa Node.js na ufumbuzi mwingine, kwa kuzingatia tu maombi ya simu (mkusanyiko wa AOT badala ya JIT ni bora zaidi katika mazingira ya mifumo ya simu, ambayo ina RAM ndogo na Kiwango cha polepole). Upimaji wa awali wa utendaji unaofanywa na wafanyakazi wa Microsoft umebainikwamba unapotumia Hermes, programu ya Microsoft Office ya Android inapatikana kwa matumizi katika sekunde 1.1. baada ya kuanza na hutumia 21.5MB ya RAM, wakati unapotumia injini ya V8 inachukua sekunde 1.4 kuanza na matumizi ya kumbukumbu ni 30MB.

Nyongeza: Facebook kuchapishwa matokeo ya mtihani mwenyewe. Wakati wa kutumia Hermes na programu ya MatterMost, muda wa kuanza upatikanaji wa kazi (TTI, Time To Interact) ulipungua kutoka sekunde 4.30 hadi 2.01, saizi ya kifurushi cha APK ilipunguzwa kutoka MB 41 hadi 22, na matumizi ya kumbukumbu kutoka 185 hadi 136. MB.

Chanzo: opennet.ru

Kuongeza maoni