Hermes: bu nima, imkoniyatlari va React Native uchun optimallashtirish

Muallif: IT Sectr Nashr etilgan: 2026-06-04 O'qish vaqti: 9 daq

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 tomonidan React Native uchun optimallashtirilgan JavaScript dvigateli.
  • Baytkod — JS kodi ilovani qurish bosqichida oldindan kompilyatsiya qilinadi.
  • Ishga tushish tezligi — JIT kompilyatsiyasining yoʻqligi ishga tushish vaqtini 50% ga qisqartiradi.
  • Xotira — Hermes JSC dan 30–40% kam xotira sarflaydi.
  • Standart — React Native 0.70+ da barcha yangi loyihalar uchun ishlatiladi.

Hermes nima?

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 va baytkod

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.

Kodni qayta ishlash bosqichlari

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.

bash
# 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 vs JSC: taqqoslash

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.

XarakteristikaHermesJavaScriptCore
KompilyatsiyaAOT (qurish bosqichida)JIT (qurilmada)
Ishga tushish vaqti50–100 ms200–400 ms
Xotira sarfi30–40% kamBaza darajasi
Hajmi~250 KB (siqilgan)~2 MB (siqilgan)
ES6+ qoʻllab-quvvatlashCheklanganToʻ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-ning React Native uchun optimallashtirishlari

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.

Xotirani boshqarish

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.

Kechikib yuklash va konstantalar

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.

js
// 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 React Native loyihasida sozlash

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 sozlash

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.

groovy
// 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.

js
// 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

Hermes React Native ning yangi arxitekturasi bilan ishlaydimi?

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.

Hermes ni iOS da ishlatish mumkinmi?

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 barcha ES6+ imkoniyatlarini qoʻllab-quvvatlaydimi?

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 ilova hajmiga qanday taʼsir qiladi?

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.

Kutubxona Hermes bilan ishlamasa nima qilish kerak?

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

  • Hermes — Meta tomonidan React Native ilovalarini tez ishga tushirish uchun optimallashtirilgan JavaScript dvigateli.
  • AOT-kompilyatsiya — JS kodi qurish bosqichida baytkodga kompilyatsiya qilinadi, qurilmada JIT yukini yoʻq qiladi.
  • Samaradorlik — ishga tushish vaqti 50% ga, xotira sarfi JSC bilan solishtirganda 30–40% ga kamayadi.
  • Hajmi — Hermes ~250 KB (siqilgan) egallaydi, bu JSC dan 8–10 marta kam.
  • Moslik — Hermes JSI va React Native ning yangi arxitekturasini, jumladan Fabric va Turbo Module ni qoʻllab-quvvatlaydi.
  • Disk raskadrovka — Chrome DevTools orqali breykpointlar va profillash bilan birga mavjud.
  • Tavsiya — mobil qurilmalarda maksimal samaradorlik uchun React Native 0.70+ versiyasidan boshlab barcha loyihalarda Hermes dan foydalaning.

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.

Loyihani muhokama qilish

Shuningdek o'qing