Hermes — ochiq manba kodli JavaScript dvigateli boʻlib, ayniqsa React Native uchun ishlab chiqilgan va mobil qurilmalar uchun optimallashtirilgan. JavaScriptCore dan farqli oʻlaroq, Hermes JS kodini qurish bosqichida baytkodga oldindan kompilyatsiya qiladi, ilovaning tez ishga tushishini taʼminlaydi. Meta, Hermes Docs, 2024 maʼlumotlariga koʻra, Hermes React Native 0.70 versiyasidan boshlab barcha yangi loyihalarda standart sifatida ishlatiladi.
Asosiy maʼlumotlar
Hermes — Meta jamoasi tomonidan ayniqsa React Native uchun yaratilgan ixcham JavaScript dvigatelidir. U 2019-yilda React Native da standart sifatida ishlatilgan JavaScriptCore (JSC) ga muqobil sifatida eʼlon qilingan. Hermes-ning asosiy maqsadi mobil qurilmalarda, ayniqsa cheklangan resursli Android da ilovalarni imkon qadar tez ishga tushirishni taʼminlashdir.
Hermes-ning asosiy xususiyati oldindan kompilyatsiya (AOT — Ahead-of-Time) dir. Kodni ishlash vaqtida kompilyatsiya qiladigan anʼanaviy JS dvigatellaridan (JIT — Just-in-Time) farqli oʻlaroq, Hermes JavaScript ni ilovani qurish bosqichida baytkodga kompilyatsiya qiladi. Bu degani, qurilmada kompilyatsiya amalga oshirilmaydi — baytkod darhol Hermes virtual mashinasi tomonidan bajariladi.
Hermes universal JS dvigateli emas — u faqat React Native stsenariylari uchun optimallashtirilgan. Unda mobil ishlanmada talab qilinmaydigan imkoniyatlar: eval, generatorlar, baʼzi ES6 xususiyatlari mavjud emas. Bu dvigatelni yanada ixcham va tezroq qilish imkonini beradi. Meta maʼlumotlariga koʻra, Hermes ning oʻlchami siqilgan holda taxminan 200–300 KB ni tashkil qiladi, bu JSC dan (taxminan 2–3 MB) sezilarli darajada kichikdir.
Hermes arxitekturasi JIT kompilyatorining yoʻqligi bilan anʼanaviy JS dvigatellaridan farqlanadi. Buning oʻrniga Hermes oldindan kompilyatsiya qilingan baytkodni bajaradigan samarali virtual mashinadan (VM) foydalanadi. JIT dan voz kechish uchta asosiy afzallik beradi: bashorat qilinadigan samaradorlik, kamroq xotira sarfi va ishga tushish vaqtining qisqarishi.
Hermes baytkodi — tez bajarish uchun optimallashtirilgan JavaScript kodining ixcham ifodasidir. Qurish bosqichida (Metro orqali) JavaScript fayllari .hbc (Hermes Bytecode) fayllariga kompilyatsiya qilinadi. Ilova bu fayllarni yuklaydi va Hermes VM ularni qoʻshimcha kompilyatsiyasiz bajaradi. Qurish jarayoni hermes-transformer plagini orqali Metro ga integratsiya qilingan.
Hermes da JavaScript ni qayta ishlash jarayoni uch bosqichdan iborat: Parse — manba kodining sintaktik tahlili, Compile — baytkodga tarjima, Execute — baytkodni virtual mashina tomonidan bajarish. Dastlabki ikki bosqich qurish bosqichida, uchinchisi esa qurilmada amalga oshiriladi. Bu har uch bosqich qurilmada bajariladigan JSC dan tubdan farq qiladi.
# Hermes baytkodini qurish vaqtida kompilyatsiya qilish
hermes -emit-binary -out index.hbc index.js
# Yaratilgan baytkod hajmini tekshirish
ls -lh index.hbc
# Baytkod statistikasini koʻrsatish
hermes -dump-bytecode index.hbc
# Baytkodni ishlab chiqarish uchun optimallashtirish
hermes -O index.js -emit-binary -O target.hbc
Kompilyatsiyadan soʻng barcha .hbc fayllari native kod bilan birga APK yoki IPA ga paketlanadi. Ilova ishga tushganda Hermes VM baytkodni yuklaydi va deyarli bir zumda bajarishni boshlaydi — V8 va JSC ga xos boʻlgan JIT isitish vaqti talab qilinmaydi.
Hermes va JavaScriptCore (JSC) ni taqqoslash qaysi dvigatelni tanlash kerakligini tushunishga yordam beradi. JSC — Apple tomonidan Safari da ishlatiladigan toʻliq huquqli JS dvigateli. Hermes — React Native uchun ixtisoslashtirilgan dvigatel. Ularning orasida tanlov loyihaning ustuvorliklariga bogʻliq.
| Xarakteristika | Hermes | JavaScriptCore |
|---|---|---|
| Kompilyatsiya | AOT (qurish bosqichida) | JIT (qurilmada) |
| Ishga tushish vaqti | 50–100 ms | 200–400 ms |
| Xotira sarfi | 30–40% kam | Baza darajasi |
| Hajmi | ~250 KB (siqilgan) | ~2 MB (siqilgan) |
| ES6+ qoʻllab-quvvatlash | Cheklangan | Toʻliq |
Hermes ishga tushish tezligi va xotira sarfida gʻalaba qozonadi, lekin murakkab hisoblashlarni bajarish samaradorligida JSC dan orqada qoladi. JSC ning JIT kompilyatsiyasi ishlash vaqtida kodning issiq qismlarini optimallashtiradi, bu esa CPU intensiv operatsiyalarda ustunlik beradi. UI yangilanishlari va navigatsiya asosiy yukni tashkil etadigan odatdagi React Native ilovasida Hermes tez ishga tushish hisobiga yaxshiroq foydalanuvchi tajribasini taʼminlaydi.
Hermes React Native uchun xos boʻlgan bir nechta optimallashtirishlarni oʻz ichiga oladi. Ulardan asosiysi JSI (JavaScript Interface) bilan integratsiyadir. Hermes JSI ni native qoʻllab-quvvatlaydi, bu esa React Native ning yangi arxitekturasidan (Fabric + Turbo Module) qoʻshimcha qatlamlarsiz foydalanish imkonini beradi. Bu Hermes va yangi arxitekturani maksimal samaradorlik uchun ideal juftlikka aylantiradi.
Hermes mobil qurilmalar uchun optimallashtirilgan avlod strategiyasi (generational GC) bilan axlat yigʻuvchidan (garbage collector) foydalanadi. Axlat yigʻilishi UI da sezilarli pauzalarni (jank) keltirib chiqarishi mumkin boʻlgan JSC dan farqli oʻlaroq, Hermes GC ni kadrlar orasida kichik qismlar bilan bajaradi, foydalanuvchi tajribasiga taʼsirini minimallashtiradi. Meta maʼlumotlariga koʻra, Hermes dagi GC pauzalari odatdagi React Native stsenariylarida JSC dagidan 2–3 marta qisqaroq.
Hermes modullarni kechikib yuklashni qoʻllab-quvvatlaydi — JavaScript moduli faqat haqiqatan zarur boʻlganda kompilyatsiya qilinadi. Bu baytkod hajmini kamaytiradi va ishga tushishni tezlashtiradi. Qoʻshimcha ravishda Hermes kompilyatsiya bosqichida konstant ifodalarni hisoblab chiqadi, iloji boʻlgan joylarda funksiya chaqiruvlarini konstant qiymatlar bilan almashtiradi.
// Hermes-ga xos optimallashtirish namunasi
// 1. Hermes konstant ifodalarni ichki joylashtiradi
const TAX_RATE = 0.07;
const price = 100;
// Hermes oldindan hisoblaydi: TAX_RATE * price kompilyatsiya vaqtida
const totalWithTax = price * (1 + TAX_RATE);
// 2. Hermes xususiyatga kirish zanjirlarini optimallashtiradi
const config = { api: { timeout: 5000 } };
// Hermes config.api ga kirishni ichki keshlaydi
const timeout = config.api.timeout;
fetch(url, { timeout });
Shuni taʼkidlash kerakki, Hermes Chrome DevTools orqali disk raskadrovkani qoʻllab-quvvatlaydi (Hermes 0.12 versiyasidan boshlab). Dasturchi tanish vositalardan foydalanishi mumkin: breykpointlar, xotira profillash, oʻzgaruvchilarni tekshirish. Bu disk raskadrovka cheklangan boʻlgan dastlabki versiyalarda Hermes ga qarshi asosiy eʼtirozlardan birini bartaraf qiladi.
Hermes ni sozlash React Native versiyasiga bogʻliq. React Native 0.70 dan boshlab Hermes yangi loyihalar uchun standart sifatida yoqilgan. Oldin yaratilgan loyihalar uchun yoki dvigatellar oʻrtasida oʻtish zarur boʻlganda, sozlash qurish konfiguratsiyasi orqali amalga oshiriladi.
Android uchun Hermes android/app/build.gradle faylida hermesEnabled bayrogʻi orqali yoqiladi. iOS uchun sozlash Podfile da :hermes_enabled oʻzgaruvchisi orqali amalga oshiriladi. Konfiguratsiyani oʻzgartirgandan soʻng podlarni qayta oʻrnatish va loyihani qayta qurish kerak.
// android/app/build.gradle — Hermes-ni yoqish
project.ext.react = [
enableHermes: true
]
// iOS Podfile — Hermes-ni yoqish
hermes_enabled = true
pod 'hermes-engine'
Hermes ilovada ishlatilayotganini tekshirish uchun Android da adb logcat | grep Hermes ni bajaring yoki iOS da Xcode konsolini tekshiring. Ilova ishga tushganda Hermes “Hermes VM initialized” yoki shunga oʻxshash xabarni chiqaradi. Shuningdek, JavaScript kodida globalThis.HermesInternal ni bajarishingiz mumkin — agar Hermes aktiv boʻlsa, bu xususiyat mavjud boʻladi.
// Hermes ishlayotganini tekshirish
if (typeof globalThis.HermesInternal !== 'undefined') {
console.log('✅ Hermes dvigateli aktiv');
console.log(
'Versiya:',
globalThis.HermesInternal.getEngineProperties()
);
} else {
console.log('❌ Hermes aktiv emas (JSC ga qaytish)');
}
Tez-tez soʻraladigan savollar
Ha, Hermes React Native ning yangi arxitekturasi (Fabric + Turbo Module) bilan toʻliq mos keladi. Bundan tashqari, Hermes va JSI birgalikda ishlab chiqilgan va juftlikda eng yaxshi samaradorlikni taʼminlaydi.
Ha, Hermes ikkala platformani — iOS va Android ni qoʻllab-quvvatlaydi. iOS da Hermes standart JavaScriptCore ni almashtiradi, xuddi shu afzalliklarni taʼminlaydi: tez ishga tushish va kam xotira sarfi.
Hermes ES6+ imkoniyatlarining aksariyatini qoʻllab-quvvatlaydi, lekin cheklovlar bilan: eval, generatorlar va Proxy mavjud emas. Odatiy React Native dagi kabi moslik uchun Babel-transpilyatsiyasidan foydalanish tavsiya etiladi.
Hermes ixcham baytkod va dvigatelning oʻzining kichik hajmi tufayli ilova hajmini kamaytiradi. Baytkod odatda mos JS kodidan 20–30% ixchamroq, dvigatelning oʻzi esa JSC dagi ~2 MB ga nisbatan ~250 KB ni tashkil qiladi.
Aksariyat kutubxonalar Hermes bilan mos keladi. Agar kutubxona eval, Proxy yoki nostandart imkoniyatlardan foydalansa — uning Hermes-ga mos versiyasi borligini tekshiring. Shuningdek, qoʻllab-quvvatlanmaydigan konstruksiyalarni almashtirish uchun Babel plaginlaridan foydalanishingiz mumkin.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.