Hermes: bu nədir, imkanları və React Native üçün optimallaşdırma

Müəllif: IT Sectr Dərc olunub: 2026-06-04 Oxuma vaxtı: 9 dəq

Hermes — açıq mənbə kodlu JavaScript mühərrikidir, xüsusi olaraq React Native üçün hazırlanmış və mobil cihazlar üçün optimallaşdırılmışdır. JavaScriptCore-dan fərqli olaraq, Hermes JS kodunu qurma mərhələsində baytkoda əvvəlcədən kompilə edir, tətbiqin sürətli başlamasını təmin edir. Meta, Hermes Docs, 2024 məlumatına görə, Hermes React Native 0.70 versiyasından etibarən defolt olaraq istifadə olunur.

Əsas məqamlar

  • Hermes — Meta tərəfindən React Native üçün optimallaşdırılmış JavaScript mühərriki.
  • Baytkod — JS kodu tətbiqin qurma mərhələsində əvvəlcədən kompilə olunur.
  • Başlama sürəti — JIT kompiləsinin olmaması başlama vaxtını 50% azaldır.
  • Yaddaş — Hermes JSC-dən 30–40% daha az yaddaş sərf edir.
  • Defolt — React Native 0.70+-də bütün yeni layihələr üçün istifadə olunur.

Hermes nədir?

Hermes — Meta komandası tərəfindən xüsusi olaraq React Native üçün yaradılmış yığcam JavaScript mühərrikidir. 2019-cu ildə React Native-də defolt olaraq istifadə olunan JavaScriptCore (JSC)-yə alternativ olaraq təqdim edilmişdir. Hermes-in əsas məqsədi mobil cihazlarda, xüsusilə məhdud resurslu Android-də tətbiqlərin mümkün qədər sürətli başlamasını təmin etməkdir.

Hermes-in əsas xüsusiyyəti əvvəlcədən kompilə (AOT — Ahead-of-Time) etməkdir. Kodu icra zamanı kompilə edən (JIT — Just-in-Time) ənənəvi JS mühərriklərindən fərqli olaraq, Hermes JavaScript-i tətbiqin qurma mərhələsində baytkoda kompilə edir. Bu o deməkdir ki, cihazda kompilə aparılmır — baytkod dərhal Hermes virtual maşını tərəfindən icra olunur.

Hermes universal JS mühərriki deyil — o, yalnız React Native ssenariləri üçün optimallaşdırılmışdır. Mobil inkişafda tələb olunmayan imkanlar: eval, generatorlar, bəzi ES6 xüsusiyyətləri yoxdur. Bu, mühərriki daha yığcam və sürətli etməyə imkan verir. Meta məlumatına görə, Hermes-in ölçüsü sıxılmış halda təxminən 200–300 KB təşkil edir ki, bu da JSC-dən (təxminən 2–3 MB) əhəmiyyətli dərəcədə azdır.

Hermes arxitekturası və baytkod

Hermes arxitekturası JIT kompilatorunun olmaması ilə ənənəvi JS mühərriklərindən fərqlənir. Bunun əvəzinə Hermes əvvəlcədən kompilə edilmiş baytkodu icra edən səmərəli virtual maşından (VM) istifadə edir. JIT-dən imtina üç əsas üstünlük verir: proqnozlaşdırıla bilən performans, daha az yaddaş sərfi və başlama vaxtının qısaldılması.

Hermes baytkodu — sürətli icra üçün optimallaşdırılmış JavaScript kodunun yığcam təsviridir. Qurma mərhələsində (Metro vasitəsilə) JavaScript faylları .hbc (Hermes Bytecode) fayllarına kompilə olunur. Tətbiq bu faylları yükləyir və Hermes VM əlavə kompilə olmadan onları icra edir. Qurma prosesi hermes-transformer plaqini vasitəsilə Metro-ya inteqrasiya olunub.

Kodun emal mərhələləri

Hermes-də JavaScript-in emal prosesi üç mərhələdən ibarətdir: Parse — mənbə kodun sintaktik analizi, Compile — baytkoda tərcümə, Execute — baytkodun virtual maşın tərəfindən icrası. İlk iki mərhələ qurma mərhələsində, üçüncüsü isə cihazda yerinə yetirilir. Bu, hər üç mərhələnin cihazda yerinə yetirildiyi JSC-dən köklü şəkildə fərqlənir.

bash
# Hermes baytkodunun qurma zamanı kompilyasiyası
hermes -emit-binary -out index.hbc index.js

# Yaradılmış baytkodun ölçüsünü yoxla
ls -lh index.hbc

# Baytkod statistikasını göstər
hermes -dump-bytecode index.hbc

# Baytkodu istehsal üçün optimallaşdır
hermes -O index.js -emit-binary -O target.hbc

Kompilə edildikdən sonra bütün .hbc faylları native kodla birlikdə APK və ya IPA-ya paketlənir. Tətbiq işə salındıqda Hermes VM baytkodu yükləyir və demək olar ki, dərhal icraya başlayır — V8 və JSC üçün xarakterik olan JIT isinmə vaxtı tələb olunmur.

Hermes vs JSC: müqayisə

Hermes və JavaScriptCore (JSC) müqayisəsi hansı mühərriki seçmək lazım olduğunu anlamağa kömək edir. JSC — Apple-dan Safari-də istifadə olunan tamhüquqlu JS mühərrikidir. Hermes — React Native üçün ixtisaslaşdırılmış mühərrik. Onlar arasında seçim layihənin prioritetlərindən asılıdır.

XarakteristikaHermesJavaScriptCore
KompiləAOT (qurma mərhələsində)JIT (cihazda)
Başlama vaxtı50–100 ms200–400 ms
Yaddaş sərfi30–40% azBaza səviyyəsi
Ölçü~250 KB (sıxılmış)~2 MB (sıxılmış)
ES6+ dəstəyiMəhdudTam

Hermes başlama sürəti və yaddaş sərfində qalib gəlir, lakin mürəkkəb hesablamaların yerinə yetirilməsində JSC-dən geri qalır. JSC-nin JIT kompiləsi icra zamanı kodeyin qaynar hissələrini optimallaşdırır ki, bu da CPU intensiv əməliyyatlarda üstünlük verir. UI yeniləmələri və naviqasiyanın əsas yükü təşkil etdiyi tipik React Native tətbiqində Hermes sürətli başlama sayəsində daha yaxşı istifadəçi təcrübəsi təmin edir.

Hermes-in React Native üçün optimallaşdırmaları

Hermes React Native üçün xüsusi olan bir neçə optimallaşdırma ehtiva edir. Onlardan əsası JSI (JavaScript Interface) ilə inteqrasiyadır. Hermes JSI-ni native olaraq dəstəkləyir ki, bu da React Native-in yeni arxitekturasından (Fabric + Turbo Module) əlavə təbəqələr olmadan istifadə etməyə imkan verir. Bu, Hermes və yeni arxitekturanı maksimum performans üçün ideal cüt edir.

Yaddaşın idarə edilməsi

Hermes mobil cihazlar üçün optimallaşdırılmış nəsil strategiyası (generational GC) olan zibil yığan (garbage collector) istifadə edir. Zibil yığılmasının UI-də nəzərəçarpacaq fasilələr (jank) yarada biləcəyi JSC-dən fərqli olaraq, Hermes GC-ni çərçivələr arasında kiçik hissələrlə yerinə yetirir, istifadəçi təcrübəsinə təsirini minimuma endirir. Meta məlumatına görə, Hermes-də GC fasilələri tipik React Native ssenarilərində JSC-dən 2–3 dəfə qısadır.

Gec yükləmə və sabitlər

Hermes modulların gec yüklənməsini dəstəkləyir — JavaScript modulu yalnız həqiqətən lazım olduqda kompilə olunur. Bu, baytkodun ölçüsünü azaldır və başlamanı sürətləndirir. Əlavə olaraq Hermes kompilə mərhələsində sabit ifadələri hesablayır, mümkün olan yerlərdə funksiya çağırışlarını sabit dəyərlərlə əvəz edir.

js
// Hermes-ə xas optimallaşdırma nümunəsi

// 1. Hermes sabit ifadələri daxilə edir
const TAX_RATE = 0.07;
const price = 100;
// Hermes əvvəlcədən hesablayır: TAX_RATE * price kompilyasiya zamanı
const totalWithTax = price * (1 + TAX_RATE);

// 2. Hermes xassə giriş zəncirlərini optimallaşdırır
const config = { api: { timeout: 5000 } };
// Hermes config.api girişini daxili keşləyir
const timeout = config.api.timeout;
fetch(url, { timeout });

Qeyd etmək vacibdir ki, Hermes Chrome DevTools vasitəsilə debug etməyi dəstəkləyir (Hermes 0.12 versiyasından). Tərtibatçı tanış alətlərdən istifadə edə bilər: breakpointlar, yaddaş profilaktikası, dəyişənlərin inspeksiyası. Bu, debug-un məhdud olduğu erkən versiyalarda Hermes-ə qarşı əsas etirazlardan birini aradan qaldırır.

Hermes-in React Native layihəsində quraşdırılması

Hermes in quraşdırılması React Native versiyasından asılıdır. React Native 0.70-dən etibarən Hermes yeni layihələr üçün defolt olaraq qoşulur. Daha əvvəl yaradılmış layihələr üçün və ya mühərriklər arasında keçid edərkən, quraşdırma qurma konfiqurasiyası vasitəsilə həyata keçirilir.

Android üçün quraşdırma

Android üçün Hermes android/app/build.gradle faylında hermesEnabled bayrağı vasitəsilə qoşulur. iOS üçün quraşdırma Podfile-da :hermes_enabled dəyişəni vasitəsilə aparılır. Konfiqurasiyanı dəyişdikdən sonra podları yenidən quraşdırmaq və layihəni yenidən qurmaq lazımdır.

groovy
// android/app/build.gradle — Hermes-i aktivləşdir
project.ext.react = [
    enableHermes: true
]

// iOS Podfile — Hermes-i aktivləşdir
hermes_enabled = true
pod 'hermes-engine'

Hermes-in tətbiqdə istifadə olunduğunu yoxlamaq üçün Android-də adb logcat | grep Hermes icra edin və ya iOS-da Xcode konsolunu yoxlayın. Tətbiq başlayanda Hermes "Hermes VM initialized" və ya oxşar mesaj çıxarır. Həmçinin JavaScript kodunda globalThis.HermesInternal icra edə bilərsiniz — əgər Hermes aktivdirsə, bu xüsusiyyət mövcud olacaq.

js
// Hermes-in işlədiyini yoxla
if (typeof globalThis.HermesInternal !== 'undefined') {
  console.log('✅ Hermes mühərriki aktivdir');
  console.log(
    'Versiya:',
    globalThis.HermesInternal.getEngineProperties()
  );
} else {
  console.log('❌ Hermes aktiv deyil (JSC-yə keçid)');
}

Tez-tez verilən suallar

Hermes React Native-in yeni arxitekturası ilə işləyirmi?

Bəli, Hermes React Native-in yeni arxitekturası (Fabric + Turbo Module) ilə tam uyğundur. Üstəlik, Hermes və JSI birlikdə hazırlanmışdır və cüt olaraq ən yaxşı performansı təmin edir.

Hermes iOS-da istifadə oluna bilərmi?

Bəli, Hermes hər iki platformanı — iOS və Android-i dəstəkləyir. iOS-da Hermes standart JavaScriptCore-u əvəz edir, eyni üstünlükləri təmin edir: sürətli başlama və daha az yaddaş sərfi.

Hermes bütün ES6+ imkanlarını dəstəkləyirmi?

Hermes ES6+ imkanlarının əksəriyyətini dəstəkləyir, lakin məhdudiyyətlərlə: eval, generatorlar və Proxy mövcud deyil. Adi React Native-də olduğu kimi uyğunluq üçün Babel-transpilyasiyasından istifadə etmək tövsiyə olunur.

Hermes tətbiqin ölçüsünə necə təsir edir?

Hermes yığcam baytkod və mühərrikin özünün daha kiçik ölçüsü sayəsində tətbiqin ölçüsünü azaldır. Baytkod adətən müvafiq JS kodundan 20–30% daha yığcam olur, mühərrikin özü isə JSC-dəki ~2 MB-a qarşı ~250 KB çəkir.

Kitabxana Hermes ilə işləmirsə nə etməli?

Kitabxanaların əksəriyyəti Hermes ilə uyğundur. Əgər kitabxana eval, Proxy və ya qeyri-standart imkanlardan istifadə edirsə — onun Hermes-uyğun versiyasının olub-olmadığını yoxlayın. Həmçinin dəstəklənməyən konstruksiyaları əvəz etmək üçün Babel plaginlərindən istifadə edə bilərsiniz.

Nəticə

  • Hermes — Meta tərəfindən React Native tətbiqlərinin sürətli başlaması üçün optimallaşdırılmış JavaScript mühərriki.
  • AOT-kompilyasiya — JS kodu qurma mərhələsində baytkoda kompilə olunur, cihazda JIT yükünü aradan qaldırır.
  • Performans — başlama vaxtı 50%, yaddaş sərfi JSC ilə müqayisədə 30–40% azalır.
  • Ölçü — Hermes ~250 KB (sıxılmış) yer tutur ki, bu da JSC-dən 8–10 dəfə azdır.
  • Uyğunluq — Hermes JSI və React Native-in yeni arxitekturasını, o cümlədən Fabric və Turbo Module-i dəstəkləyir.
  • Debug — Chrome DevTools vasitəsilə breakpointlar və profilaktika da daxil olmaqla mövcuddur.
  • Tövsiyə — mobil cihazlarda maksimum performans üçün React Native 0.70+ versiyasından başlayaraq bütün layihələrdə Hermes-dən istifadə edin.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun