Муҳаррики JavaScript-и Hermes кушодаи Facebook

Муҳаррики JavaScript-и сабуки кушодаи Facebook Хермес, барои иҷрои барномаҳо дар асоси чаҳорчӯба оптимизатсия карда шудааст Натиҷаро баргардонед дар платформаи Android. Дастгирии Hermes сохташуда дар React Native аз версияи имрӯзаи 0.60.2 сар карда. Лоиҳа барои ҳалли мушкилот бо вақтҳои тӯлонии оғозёбӣ барои барномаҳои аслии JavaScript ва истеъмоли назарраси захираҳо пешбинӣ шудааст. Кодекс навиштааст дар C++ ва таҳти иҷозатномаи MIT паҳн карда мешавад.

Дар байни бартариҳои истифодаи Hermes, кам шудани вақти оғози барнома, кам шудани истеъмоли хотира ва кам шудани андозаи барномаҳо вуҷуд дорад. Ҳангоми истифодаи V8, марҳилаҳои аз ҳама вақт сарфшаванда марҳилаҳои таҳлили рамзи сарчашма ва тартиб додани он дар парвоз мебошанд. Ҳермес ин қадамҳоро ба марҳилаи сохтмон меорад ва имкон медиҳад, ки барномаҳо дар шакли байткоди паймон ва муассир расонида шаванд.

Барои бевосита иҷро кардани барнома, мошини виртуалии дар доираи лоиҳа таҳияшуда бо коллектори партовҳои SemiSpace истифода мешавад, ки блокҳоро танҳо дар ҳолати зарурӣ тақсим мекунад (Дар асоси талабот), интиқол ва дефрагментацияи блокҳоро дастгирӣ мекунад, хотираи озодро ба системаи оператсионӣ бармегардонад, бе давра ба давра скан кардани мундариҷаи тамоми теппа.

Коркарди JavaScript ба якчанд марҳила тақсим мешавад. Аввалан, матнҳои манбаъ таҳлил карда мешаванд ва тасвири фосилавии код тавлид мешавад (Ҳермес И.Р), дар асоси намояндагӣ SSA (Супориши ягонаи статикӣ). Баъдан, муаррифии мобайнӣ дар оптимизатор коркард карда мешавад, ки усулҳои оптимизатсияи статикиро барои табдил додани рамзи ибтидоии фосилавӣ ба муаррифии фосилавии муассиртар ҳангоми нигоҳ доштани семантикаи аслии барнома истифода мебарад. Дар марҳилаи охирин, байткоди мошини виртуалии ба қайд гирифташуда тавлид мешавад.

Дар мотор аз ҷониби дастгирӣ карда мешавад қисми стандарти ECMAScript 2015 JavaScript (ҳадафи ниҳоӣ дастгирии пурраи он аст) ва мутобиқатро бо аксари барномаҳои мавҷудаи React Native таъмин мекунад. Ҳермес тасмим гирифт, ки иҷрои маҳаллии eval(), бо изҳорот, инъикос (Reflect ва Proxy), Intl API ва баъзе парчамҳоро дар RegExp дастгирӣ накунад. Барои фаъол кардани Hermes дар барномаи React Native, ба лоиҳа танҳо имконоти "enableHermes: true" -ро илова кунед. Ҳермесро дар реҷаи CLI сохтан низ имконпазир аст, ки ба шумо имкон медиҳад файлҳои ихтиёрии JavaScript-ро аз сатри фармон иҷро кунед. Реҷаи компиляцияи танбалӣ барои ислоҳ кардан дастрас аст, ки ба шумо имкон медиҳад JavaScript-ро на ҳар дафъа дар ҷараёни таҳия тартиб диҳед, балки байткодро дар парвоз аллакай дар дастгоҳ тавлид кунед.

Ҳамзамон, Facebook нақша надорад, ки Hermes-ро барои Node.js ва дигар қарорҳо мутобиқ созад ва танҳо ба замимаҳои мобилӣ тамаркуз кунад (маҷмӯи AOT ба ҷои JIT дар заминаи системаҳои мобилӣ, ки RAM маҳдуд ва Flash сусттар доранд, беҳтарин аст). Санҷиши пешакии иҷроиш, ки аз ҷониби кормандони Microsoft гузаронида шудааст ошкор кардки хангоми истифодабарии Гермес замимаи Microsoft Office барои Android дар 1.1 сония барои истифода дастрас мешавад. пас аз оғозёбӣ ва 21.5 МБ хотираи оперативӣ истеъмол мекунад, дар ҳоле ки ҳангоми истифодаи муҳаррики V8 барои оғоз кардан 1.4 сония ва истеъмоли хотира 30 МБ аст.

Илова: Facebook нашр натиҷаҳои санҷиши худ. Ҳангоми истифодаи Hermes бо замимаи MatterMost, вақти оғоз кардани дастрасии кор (TTI, Time To Interact) аз 4.30 то 2.01 сония коҳиш ёфт, андозаи бастаи APK аз 41 то 22 МБ ва истеъмоли хотира аз 185 то 136 сония коҳиш ёфт. МБ.

Манбаъ: opennet.ru

Илова Эзоҳ