Hermes: mi ez, képességek és optimalizálás a React Native számára

Szerző: IT Sectr Megjelenés: 2026-06-04 Olvasási idő: 9 perc

A Hermes — egy nyílt forráskódú JavaScript-motor, amelyet kifejezetten a React Native számára fejlesztettek ki és optimalizáltak mobileszközökre. A JavaScriptCore-tól eltérően a Hermes előre lefordítja a JS kódot bájtkódra a build fázisban, biztosítva az alkalmazás gyors indítását. A Meta, Hermes Docs, 2024 adatai szerint a Hermes alapértelmezés szerint használatos a React Native 0.70-es verziójától kezdve.

Főbb pontok

  • Hermes — JavaScript-motor a Meta-tól, optimalizálva a React Native számára.
  • Bájtkód — a JS kód előre le van fordítva az alkalmazás build fázisában.
  • Indítási sebesség — a JIT-fordítás hiánya 50%-kal csökkenti az indítási időt.
  • Memória — a Hermes 30–40%-kal kevesebb memóriát fogyaszt, mint a JSC.
  • Alapértelmezett — a React Native 0.70+-ban használatos minden új projekthez.

Mi az a Hermes?

Hermes — egy kompakt JavaScript-motor, amelyet a Meta csapata készített kifejezetten a React Native számára. 2019-ben jelentették be alternatívaként a JavaScriptCore (JSC) számára, amelyet alapértelmezés szerint használtak a React Native-ben. A Hermes fő célja, hogy a lehető leggyorsabb indítást biztosítsa az alkalmazásoknak mobileszközökön, különösen a korlátozott erőforrású Androidon.

A Hermes legfontosabb jellemzője az előzetes fordítás (AOT — Ahead-of-Time). Azokkal a hagyományos JS-motorokkal ellentétben, amelyek futásidőben fordítják a kódot (JIT — Just-in-Time), a Hermes már az alkalmazás build fázisában bájtkódra fordítja a JavaScriptet. Ez azt jelenti, hogy az eszközön nem történik fordítás — a bájtkódot azonnal végrehajtja a Hermes virtuális gép.

A Hermes nem univerzális JS-motor — kizárólag a React Native forgatókönyvekre van optimalizálva. Hiányoznak belőle a mobilfejlesztésben nem igényelt képességek: eval, generátorok, néhány ES6-funkció. Ez lehetővé teszi, hogy a motor kompaktabb és gyorsabb legyen. A Meta adatai szerint a Hermes mérete körülbelül 200–300 KB tömörített formában, ami jelentősen kisebb, mint a JSC (körülbelül 2–3 MB).

A Hermes architektúrája és bájtkód

A Hermes architektúrája eltér a hagyományos JS-motoroktól a JIT-fordító hiányában. Ehelyett a Hermes egy hatékony virtuális gépet (VM) használ, amely az előre lefordított bájtkódot hajtja végre. A JIT elhagyása három fő előnyt nyújt: kiszámítható teljesítmény, alacsonyabb memóriafogyasztás és rövidebb indítási idő.

A Hermes bájtkód a JavaScript-kód kompakt reprezentációja, optimalizálva a gyors végrehajtásra. A build fázisban (a Metro-n keresztül) a JavaScript-fájlok .hbc (Hermes Bytecode) fájlokká fordulnak. Az alkalmazás betölti ezeket a fájlokat, és a Hermes VM további fordítás nélkül végrehajtja őket. A build folyamat a hermes-transformer pluginon keresztül integrálódik a Metro-ba.

A kód feldolgozásának szakaszai

A JavaScript feldolgozásának folyamata a Hermes-ben három szakaszból áll: Parse — a forráskód szintaktikai elemzése, Compile — bájtkódra fordítás, Execute — a bájtkód végrehajtása a virtuális gép által. Az első két szakasz a build fázisban, a harmadik az eszközön történik. Ez alapvetően különbözik a JSC-től, ahol mindhárom szakasz az eszközön történik.

bash
# Hermes bájtkód fordítás a build során
hermes -emit-binary -out index.hbc index.js

# Ellenőrizze a generált bájtkód méretét
ls -lh index.hbc

# Bájtkód statisztikák megjelenítése
hermes -dump-bytecode index.hbc

# Bájtkód optimalizálása éles használatra
hermes -O index.js -emit-binary -O target.hbc

A fordítás után az összes .hbc fájl a natív kóddal együtt APK-ba vagy IPA-ba csomagolódik. Az alkalmazás indításakor a Hermes VM betölti a bájtkódot és szinte azonnal megkezdi a végrehajtást — nem igényel JIT-bemelegítési időt, ami a V8 és JSC esetében jellemző.

Hermes vs JSC: összehasonlítás

A Hermes és a JavaScriptCore (JSC) összehasonlítása segít megérteni, hogy mikor melyik motort válasszuk. JSC — egy teljes értékű JS-motor az Apple-től, a Safari-ban használatos. Hermes — egy speciális motor a React Native számára. A választás közöttük a projekt prioritásaitól függ.

JellemzőHermesJavaScriptCore
FordításAOT (build fázisban)JIT (eszközön)
Indítási idő50–100 ms200–400 ms
Memóriafogyasztás30–40%-kal kevesebbAlapszint
Méret~250 KB (tömörített)~2 MB (tömörített)
ES6+ támogatásKorlátozottTeljes

A Hermes nyer az indítási sebességben és memóriafogyasztásban, de alulmarad a JSC-vel szemben az összetett számítások végrehajtásának teljesítményében. A JSC JIT-fordítása optimalizálja a kód forró részeit futásidőben, ami előnyt jelent a CPU-intenzív műveletekben. Egy tipikus React Native alkalmazásnál, ahol a UI-frissítések és a navigáció képezik a fő terhelést, a Hermes jobb felhasználói élményt biztosít a gyors indításnak köszönhetően.

A Hermes optimalizálásai a React Native számára

Hermes számos, a React Native számára specifikus optimalizálást tartalmaz. A legfontosabb ezek közül a JSI-vel (JavaScript Interface) való integráció. A Hermes natívan támogatja a JSI-t, ami lehetővé teszi a React Native új architektúrájának (Fabric + Turbo Module) használatát további rétegek nélkül. Ez a Hermest és az új architektúrát ideális párrá teszi a maximális teljesítmény érdekében.

Memóriakezelés

A Hermes generációs stratégiájú (generational GC) szemétgyűjtőt használ, optimalizálva mobileszközökre. Ellentétben a JSC-vel, ahol a szemétgyűjtés észrevehető szüneteket (jank) okozhat a UI-ban, a Hermes kis adagokban, képkockák között végzi a GC-t, minimalizálva a felhasználói élményre gyakorolt hatást. A Meta adatai szerint a Hermes-ben a GC-szünetek 2–3-szor rövidebbek, mint a JSC-ben tipikus React Native forgatókönyvek esetén.

Lusta betöltés és konstansok

A Hermes támogatja a modulok lusta betöltését — a JavaScript-modul csak akkor fordul le, amikor ténylegesen szükség van rá. Ez csökkenti a bájtkód méretét és gyorsítja az indítást. Ezenkívül a Hermes a fordítási fázisban kiszámítja a konstans kifejezéseket, ahol lehetséges, függvényhívásokat konstans értékekkel helyettesítve.

js
// Hermes-specifikus optimalizálási példa

// 1. A Hermes beilleszti a konstans kifejezéseket
const TAX_RATE = 0.07;
const price = 100;
// A Hermes előre kiszámítja: TAX_RATE * price a fordítás során
const totalWithTax = price * (1 + TAX_RATE);

// 2. A Hermes optimalizálja a tulajdonságelérési láncokat
const config = { api: { timeout: 5000 } };
// A Hermes belsőleg gyorsítótárazza a config.api elérést
const timeout = config.api.timeout;
fetch(url, { timeout });

Fontos megjegyezni, hogy a Hermes támogatja a debugolást a Chrome DevTools-on keresztül (a Hermes 0.12-es verziójától kezdve). A fejlesztő ismerős eszközöket használhat: töréspontok, memória profilozás, változók vizsgálata. Ez megszünteti az egyik fő kifogást a Hermes korai verzióival szemben, amikor a debugolás korlátozott volt.

A Hermes beállítása React Native projektben

A Hermes beállítása a React Native verziójától függ. A React Native 0.70-től kezdve a Hermes alapértelmezés szerint engedélyezve van az új projektekhez. A korábban létrehozott projekteknél vagy a motorok közötti váltás szükségessége esetén a beállítás a build konfiguráción keresztül történik.

Beállítás Androidra

Androidra a Hermes a android/app/build.gradle fájlban a hermesEnabled jelölőn keresztül engedélyezhető. iOS-re a beállítás a Podfile-ban a :hermes_enabled változón keresztül történik. A konfiguráció módosítása után újra kell telepíteni a podokat és újra kell építeni a projektet.

groovy
// android/app/build.gradle — Hermes engedélyezése
project.ext.react = [
    enableHermes: true
]

// iOS Podfile — Hermes engedélyezése
hermes_enabled = true
pod 'hermes-engine'

Annak ellenőrzéséhez, hogy a Hermes használatban van-e az alkalmazásban, futtassa a adb logcat | grep Hermes parancsot Androidon, vagy ellenőrizze az Xcode konzolt iOS-en. Az alkalmazás indításakor a Hermes a „Hermes VM initialized” vagy hasonló üzenetet jeleníti meg. Futtathatja a globalThis.HermesInternal parancsot is JavaScript-kódban — ha a Hermes aktív, ez a tulajdonság elérhető lesz.

js
// Ellenőrizze, hogy fut-e a Hermes
if (typeof globalThis.HermesInternal !== 'undefined') {
  console.log('✅ Hermes motor aktív');
  console.log(
    'Verzió:',
    globalThis.HermesInternal.getEngineProperties()
  );
} else {
  console.log('❌ Hermes nem aktív (visszaállás JSC-re)');
}

Gyakran Ismételt Kérdések

Működik a Hermes a React Native új architektúrájával?

Igen, a Hermes teljes mértékben kompatibilis a React Native új architektúrájával (Fabric + Turbo Module). Sőt, a Hermest és a JSI-t együtt fejlesztették, és párban biztosítják a legjobb teljesítményt.

Használható a Hermes iOS-en?

Igen, a Hermes mindkét platformot támogatja — iOS-t és Androidot. iOS-en a Hermes helyettesíti a szabványos JavaScriptCore-t, ugyanazokat az előnyöket nyújtva: gyors indítás és alacsonyabb memóriafogyasztás.

Támogatja a Hermes az összes ES6+ képességet?

Hermes a legtöbb ES6+ képességet támogatja, de korlátozásokkal: hiányzik az eval, a generátorok és a Proxy. A kompatibilitás érdekében Babel-transzpilláció használata javasolt, ahogy a szokásos React Native-ban is.

Hogyan befolyásolja a Hermes az alkalmazás méretét?

Hermes csökkenti az alkalmazás méretét a kompakt bájtkódnak és a motor kisebb méretének köszönhetően. A bájtkód általában 20–30%-kal kompaktabb, mint a megfelelő JS-kód, és maga a motor ~250 KB-ot nyom a JSC ~2 MB-jával szemben.

Mit tegyek, ha egy könyvtár nem működik a Hermes-szel?

A legtöbb könyvtár kompatibilis a Hermes-szel. Ha a könyvtár eval, Proxy vagy nem szabványos képességeket használ — ellenőrizze, van-e Hermes-kompatibilis verziója. Használhat Babel-pluginokat is a nem támogatott konstrukciók helyettesítésére.

Összegzés

  • Hermes — JavaScript-motor a Meta-tól, optimalizálva a React Native alkalmazások gyors indítására.
  • AOT-fordítás — a JS-kód a build fázisban bájtkódra fordul, kiküszöbölve a JIT terhelést az eszközön.
  • Teljesítmény — az indítási idő 50%-kal, a memóriafogyasztás 30–40%-kal csökken a JSC-hez képest.
  • Méret — a Hermes ~250 KB-ot (tömörített) foglal, ami 8–10-szer kevesebb, mint a JSC.
  • Kompatibilitás — a Hermes támogatja a JSI-t és a React Native új architektúráját, beleértve a Fabric és Turbo Module-t.
  • Debugolás — elérhető a Chrome DevTools-on keresztül, beleértve a töréspontokat és profilozást.
  • Ajánlás — használja a Hermest minden React Native projekthez a 0.70+ verziótól kezdve a maximális teljesítmény érdekében mobileszközökön.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is