Facebook ачык булак Hermes JavaScript кыймылдаткычы

Facebook ачык булактуу жеңил JavaScript кыймылдаткычы Гермес, алкакка негизделген колдонмолорду иштетүү үчүн оптималдаштырылган иш-аракет кылгыла эне Android платформасында. Hermes колдоо орнотулган React Nativeде бүгүнкү 0.60.2 релизинен баштап. Долбоор түпнуска JavaScript тиркемелери жана олуттуу ресурс керектөөлөрү үчүн узак убакытка байланыштуу көйгөйлөрдү чечүү үчүн иштелип чыккан. Code жазылган C++ тилинде жана MIT лицензиясы боюнча таратылат.

Гермести колдонуунун артыкчылыктарынын арасында тиркемени баштоо убактысынын кыскарышы, эстутум керектөөнүн азайышы жана тиркеменин көлөмүнүн азайышы бар. V8ди колдонууда эң көп убакытты талап кылган этаптар бул баштапкы кодду талдоо жана аны тез арада компиляциялоо этаптары. Hermes бул кадамдарды куруу стадиясына алып келет жана тиркемелерди компакт жана эффективдүү байт код түрүндө жеткирүүгө мүмкүндүк берет.

Тиркемени түздөн-түз аткаруу үчүн долбоордун алкагында иштелип чыккан виртуалдык машина SemiSpace таштанды жыйноочу менен колдонулат, ал блокторду зарыл болгондо гана бөлүштүрөт (Талап боюнча), блокторду жылдырууну жана дефрагментациялоону колдойт, бош калган эстутумду мезгил-мезгили менен операциялык системага кайтарып берет. бүт үймөктүн мазмунун сканерлөө.

JavaScript иштетүү бир нече этаптарга бөлүнөт. Биринчиден, баштапкы тексттер талданат жана коддун ортодогу өкүлчүлүгү түзүлөт (Hermes IR), өкүлчүлүктүн негизинде SSA (Статикалык жалгыз дайындоо). Андан кийин, ортодогу өкүлчүлүк оптимизатордо иштетилет, ал программанын баштапкы семантикасын сактоо менен баштапкы аралык кодду натыйжалуураак аралык көрсөтүүгө айландыруу үчүн алдыга статикалык оптималдаштыруу ыкмаларын колдонот. Акыркы этапта катталган виртуалдык машинанын байт коду түзүлөт.

Мотордо тарабынан колдоого алынган ECMAScript 2015 JavaScript стандартынын бир бөлүгү (акыркы максат аны толугу менен колдоо) жана учурдагы React Native тиркемелеринин көбү менен шайкештикти камсыз кылат. Hermes билдирүүлөр, чагылдыруу (Reflect жана Proxy), Intl API жана RegExpдеги кээ бир желектер менен eval(), жергиликтүү аткарылышын колдобоону чечти. Hermesти React Native тиркемесинде иштетүү үчүн долбоорго "enableHermes: true" опциясын кошуңуз. Ошондой эле Hermesти CLI режиминде курууга болот, бул сизге буйрук сабынан каалаган JavaScript файлдарын аткарууга мүмкүндүк берет. Мүчүлүштүктөрдү оңдоо үчүн жалкоо компиляция режими жеткиликтүү, ал JavaScriptти иштеп чыгуу процессинде ар дайым компиляциялоого эмес, байт-кодду түзмөгүңүздө эле түзүүгө мүмкүндүк берет.

Ошол эле учурда, Facebook Hermes үчүн Node.js жана башка чечимдерди ыңгайлаштырып, мобилдик тиркемелерге гана басым жасоону пландаштырбайт (JITтин ордуна AOT компиляциясы чектелген оперативдүү жана жайыраак Flash бар мобилдик системалардын контекстинде эң оптималдуу). Майкрософт кызматкерлери тарабынан ишке ашырылган алдын ала аткаруу тестирлөө аныкталганHermes колдонгондо, Android үчүн Microsoft Office тиркемеси 1.1 секундада колдонууга жеткиликтүү болот. ишке киргизгенден кийин жана 21.5 МБ оперативдүү эстутум керектейт, ал эми V8 кыймылдаткычын колдонууда ишке киргизүү үчүн 1.4 секунд талап кылынат жана эстутум керектөө 30 МБ түзөт.

Кошумча: Facebook жарыяланган өз тестинин натыйжалары. Hermesти MatterMost тиркемеси менен колдонууда жумушка жеткиликтүүлүктү баштоо убактысы (TTI, Interact Time) 4.30дан 2.01 секундага чейин кыскарган, APK топтомунун көлөмү 41ден 22 МБга чейин, ал эми эстутум керектөө 185тен 136га чейин кыскарган. MB.

Source: opennet.ru

Комментарий кошуу