Hermes: خصوصیات اور React Native کے لیے اصلاح

مصنف: IT Sectr اشاعت: 2026-06-04 مطالعے کا وقت: 9 منٹ

Hermes ایک اوپن سورس JavaScript انجن ہے جو خاص طور پر React Native کے لیے تیار کیا گیا ہے اور موبائل آلات کے لیے موزوں بنایا گیا ہے۔ JavaScriptCore کے برعکس، Hermes بلڈ مرحلے کے دوران JS کوڈ کو پہلے سے بائٹ کوڈ میں کمپائل کرتا ہے، جس سے ایپلیکیشن کا تیز آغاز ممکن ہوتا ہے۔ Meta، Hermes Docs، 2024 کے مطابق، Hermes React Native ورژن 0.70 سے طے شدہ طور پر استعمال ہوتا ہے۔

اہم نکات

  • Hermes — Meta کا JavaScript انجن، React Native کے لیے موزوں۔
  • بائٹ کوڈ — JS کوڈ ایپ بلڈ مرحلے میں پہلے سے کمپائل ہوتا ہے۔
  • شروع ہونے کی رفتار — JIT کمپائلیشن کی عدم موجودگی لانچ کا وقت 50% کم کرتی ہے۔
  • میموری — Hermes JSC کے مقابلے میں 30–40% کم میموری استعمال کرتا ہے۔
  • طے شدہ — React Native 0.70+ میں تمام نئے پروجیکٹس کے لیے استعمال ہوتا ہے۔

Hermes کیا ہے؟

Hermes ایک کمپیکٹ JavaScript انجن ہے جسے Meta ٹیم نے خاص طور پر React Native کے لیے بنایا ہے۔ اس کا اعلان 2019 میں JavaScriptCore (JSC) کے متبادل کے طور پر کیا گیا تھا، جو React Native میں طے شدہ طور پر استعمال ہوتا تھا۔ Hermes کا بنیادی مقصد موبائل ایپلیکیشنز، خاص طور پر محدود وسائل والے Android پر ممکنہ حد تک تیز ترین آغاز فراہم کرنا ہے۔

Hermes کی اہم خصوصیت پہلے سے کمپائلیشن (AOT — Ahead-of-Time) ہے۔ روایتی JS انجنوں کے برعکس جو رن ٹائم پر کوڈ کمپائل کرتے ہیں (JIT — Just-in-Time)، Hermes ایپ بلڈ مرحلے کے دوران JavaScript کو بائٹ کوڈ میں کمپائل کرتا ہے۔ اس کا مطلب ہے کہ ڈیوائس پر کوئی کمپائلیشن نہیں ہوتی — بائٹ کوڈ فوری طور پر Hermes ورچوئل مشین کے ذریعے عمل میں لایا جاتا ہے۔

Hermes ایک عالمگیر JS انجن نہیں ہے — یہ صرف React Native منظرناموں کے لیے موزوں ہے۔ اس میں موبائل ڈیویلپمنٹ میں غیر ضروری خصوصیات کی کمی ہے: eval، جنریٹرز، اور کچھ ES6 خصوصیات۔ یہ انجن کو مزید کمپیکٹ اور تیز بناتا ہے۔ Meta کے مطابق، Hermes کا سائز کمپریسڈ حالت میں تقریباً 200–300 KB ہے، جو JSC (تقریباً 2–3 MB) سے نمایاں طور پر چھوٹا ہے۔

Hermes کا آرکیٹیکچر اور بائٹ کوڈ

Hermes کا آرکیٹیکچر JIT کمپائلر کی عدم موجودگی میں روایتی JS انجنوں سے مختلف ہے۔ اس کے بجائے، Hermes ایک موثر ورچوئل مشین (VM) استعمال کرتا ہے جو پہلے سے کمپائل شدہ بائٹ کوڈ پر عمل کرتی ہے۔ JIT کو ترک کرنے سے تین اہم فوائد حاصل ہوتے ہیں: پیش قیاسی کارکردگی، کم میموری استعمال، اور کم شروع ہونے کا وقت۔

Hermes بائٹ کوڈ JavaScript کوڈ کی ایک کمپیکٹ نمائندگی ہے جو تیز عملدرآمد کے لیے موزوں ہے۔ بلڈ مرحلے (Metro کے ذریعے) کے دوران، JavaScript فائلیں .hbc (Hermes Bytecode) فائلوں میں کمپائل ہوتی ہیں۔ ایپ ان فائلوں کو لوڈ کرتی ہے، اور Hermes VM بغیر اضافی کمپائلیشن کے ان پر عمل کرتی ہے۔ بلڈ کا عمل hermes-transformer پلگ ان کے ذریعے Metro میں ضم ہے۔

کوڈ پروسیسنگ کے مراحل

Hermes میں JavaScript پروسیسنگ کا بہاؤ تین مراحل پر مشتمل ہے: Parse — سورس کوڈ کا نحوی تجزیہ، Compile — بائٹ کوڈ میں ترجمہ، Execute — ورچوئل مشین کے ذریعے بائٹ کوڈ پر عمل۔ پہلے دو مراحل بلڈ مرحلے میں چلتے ہیں، تیسرا ڈیوائس پر۔ یہ JSC سے بنیادی طور پر مختلف ہے، جہاں تینوں مراحل ڈیوائس پر چلتے ہیں۔

bash
# بلڈ کے دوران Hermes بائٹ کوڈ کمپائلیشن
hermes -emit-binary -out index.hbc index.js

# جنریٹ کردہ بائٹ کوڈ کا سائز چیک کریں
ls -lh index.hbc

# بائٹ کوڈ کے اعدادوشمار دکھائیں
hermes -dump-bytecode index.hbc

# پروڈکشن کے لیے بائٹ کوڈ بہتر بنائیں
hermes -O index.js -emit-binary -O target.hbc

کمپائلیشن کے بعد، تمام .hbc فائلیں نیٹیو کوڈ کے ساتھ APK یا IPA میں پیک ہو جاتی ہیں۔ جب ایپ شروع ہوتی ہے، Hermes VM بائٹ کوڈ لوڈ کرتی ہے اور تقریباً فوری طور پر عملدرآمد شروع کر دیتی ہے — JIT وارم اپ وقت کی ضرورت نہیں ہے، جو V8 اور JSC کے لیے عام ہے۔

Hermes بمقابلہ JSC: موازنہ

Hermes اور JavaScriptCore (JSC) کا موازنہ یہ سمجھنے میں مدد دیتا ہے کہ کب کون سا انجن منتخب کرنا ہے۔ JSC Apple کا مکمل خصوصیات والا JS انجن ہے، جو Safari میں استعمال ہوتا ہے۔ Hermes React Native کے لیے ایک خصوصی انجن ہے۔ ان کے درمیان انتخاب پروجیکٹ کی ترجیحات پر منحصر ہے۔

خصوصیتHermesJavaScriptCore
کمپائلیشنAOT (بلڈ کے دوران)JIT (ڈیوائس پر)
شروع ہونے کا وقت50–100 ms200–400 ms
میموری استعمال30–40% کمبنیادی سطح
سائز~250 KB (کمپریسڈ)~2 MB (کمپریسڈ)
ES6+ سپورٹمحدودمکمل

Hermes شروع ہونے کی رفتار اور میموری استعمال میں جیتتا ہے لیکن پیچیدہ حسابات کی کارکردگی میں JSC سے پیچھے ہے۔ JSC کی JIT کمپائلیشن عملدرآمد کے دوران ہاٹ کوڈ پاتھ کو بہتر بناتی ہے، جس سے CPU-heavy آپریشنز میں فائدہ ہوتا ہے۔ ایک عام React Native ایپ کے لیے، جہاں UI اپ ڈیٹس اور نیویگیشن بنیادی کام کا بوجھ بناتے ہیں، Hermes تیز شروع ہونے کے ذریعے بہتر صارف تجربہ فراہم کرتا ہے۔

React Native کے لیے Hermes کی اصلاح

Hermes میں React Native کے لیے مخصوص کئی اصلاحیں شامل ہیں۔ سب سے اہم JSI (JavaScript Interface) کے ساتھ انضمام ہے۔ Hermes JSI کو مقامی طور پر سپورٹ کرتا ہے، جس سے اضافی پرتوں کے بغیر نئے React Native آرکیٹیکچر (Fabric + Turbo Modules) کا استعمال ممکن ہوتا ہے۔ یہ Hermes اور نئے آرکیٹیکچر کو زیادہ سے زیادہ کارکردگی کے لیے مثالی جوڑی بناتا ہے۔

میموری کا انتظام

Hermes موبائل آلات کے لیے موزوں جنریشنل گاربیج کلکٹر (generational GC) استعمال کرتا ہے۔ JSC کے برعکس، جہاں گاربیج کلکشن UI میں نمایاں وقفے (jank) کا سبب بن سکتی ہے، Hermes فریموں کے درمیان چھوٹے حصوں میں GC انجام دیتا ہے، صارف کے تجربے پر اثر کو کم سے کم کرتا ہے۔ Meta کے مطابق، عام React Native منظرناموں میں Hermes میں GC وقفے JSC کے مقابلے میں 2–3 گنا چھوٹے ہیں۔

سست لوڈنگ اور مستقل

Hermes سست ماڈیول لوڈنگ کو سپورٹ کرتا ہے — JavaScript ماڈیول صرف اس وقت کمپائل ہوتا ہے جب واقعی ضرورت ہو۔ اس سے بائٹ کوڈ کا سائز کم ہوتا ہے اور شروع ہونے میں تیزی آتی ہے۔ مزید برآں، Hermes کمپائل ٹائم پر مستقل ایکسپریشنز کا جائزہ لیتا ہے، جہاں ممکن ہو فنکشن کالز کو مستقل قدروں سے بدل دیتا ہے۔

js
// Hermes-مخصوص اصلاح کی مثال

// 1. Hermes مستقل ایکسپریشنز کو ان لائن کرتا ہے
const TAX_RATE = 0.07;
const price = 100;
// Hermes کمپائلیشن کے دوران TAX_RATE * price کا پہلے سے حساب لگاتا ہے
const totalWithTax = price * (1 + TAX_RATE);

// 2. Hermes پراپرٹی ایکسس چین کو بہتر بناتا ہے
const config = { api: { timeout: 5000 } };
// Hermes اندرونی طور پر config.api تک رسائی کو کیش کرتا ہے
const timeout = config.api.timeout;
fetch(url, { timeout });

یہ نوٹ کرنا ضروری ہے کہ Hermes Chrome DevTools کے ذریعے ڈیبگنگ کو سپورٹ کرتا ہے (Hermes 0.12 سے شروع)۔ ڈیویلپرز واقف ٹولز استعمال کر سکتے ہیں: بریک پوائنٹس، میموری پروفائلنگ، متغیرات کا معائنہ۔ یہ ابتدائی ورژنز میں Hermes کے خلاف ایک اہم اعتراض کو ختم کرتا ہے، جہاں ڈیبگنگ محدود تھی۔

React Native پروجیکٹ میں Hermes کا سیٹ اپ

Hermes کا سیٹ اپ React Native ورژن پر منحصر ہے۔ React Native 0.70 سے، Hermes نئے پروجیکٹس کے لیے طے شدہ طور پر فعال ہے۔ پہلے بنائے گئے پروجیکٹس کے لیے، یا انجنوں کے درمیان سوئچ کرتے وقت، کنفیگریشن بلڈ سیٹنگز کے ذریعے کی جاتی ہے۔

Android سیٹ اپ

Android کے لیے، Hermes android/app/build.gradle فائل میں hermesEnabled فلیگ کے ذریعے فعال کیا جاتا ہے۔ iOS کے لیے، کنفیگریشن Podfile میں :hermes_enabled متغیر کے ذریعے کی جاتی ہے۔ کنفیگریشن تبدیل کرنے کے بعد، آپ کو پوڈز دوبارہ انسٹال کرنے اور پروجیکٹ دوبارہ بلڈ کرنے کی ضرورت ہے۔

groovy
// android/app/build.gradle — Hermes فعال کریں
project.ext.react = [
    enableHermes: true
]

// iOS Podfile — Hermes فعال کریں
hermes_enabled = true
pod 'hermes-engine'

یہ تصدیق کرنے کے لیے کہ آپ کی ایپ میں Hermes چل رہا ہے، Android پر adb logcat | grep Hermes چلائیں یا iOS پر Xcode کنسول چیک کریں۔ جب ایپ شروع ہوتی ہے، Hermes “Hermes VM initialized” جیسا پیغام دکھاتا ہے۔ آپ JavaScript کوڈ میں globalThis.HermesInternal بھی چیک کر سکتے ہیں — اگر Hermes فعال ہے، تو یہ پراپرٹی دستیاب ہوگی۔

js
// چیک کریں کہ Hermes چل رہا ہے یا نہیں
if (typeof globalThis.HermesInternal !== 'undefined') {
  console.log('✅ Hermes انجن فعال');
  console.log(
    'ورژن:',
    globalThis.HermesInternal.getEngineProperties()
  );
} else {
  console.log('❌ Hermes فعال نہیں (JSC پر فال بیک)');
}

اکثر پوچھے گئے سوالات

کیا Hermes نئے React Native آرکیٹیکچر کے ساتھ کام کرتا ہے؟

ہاں، Hermes نئے React Native آرکیٹیکچر (Fabric + Turbo Modules) کے ساتھ مکمل طور پر مطابقت رکھتا ہے۔ مزید برآں، Hermes اور JSI کو ایک ساتھ تیار کیا گیا تھا اور یہ جوڑی کے طور پر بہترین کارکردگی فراہم کرتے ہیں۔

کیا Hermes iOS پر استعمال کیا جا سکتا ہے؟

ہاں، Hermes دونوں پلیٹ فارمز — iOS اور Android کو سپورٹ کرتا ہے۔ iOS پر، Hermes معیاری JavaScriptCore کی جگہ لیتا ہے، وہی فوائد فراہم کرتا ہے: تیز آغاز اور کم میموری استعمال۔

کیا Hermes تمام ES6+ خصوصیات کو سپورٹ کرتا ہے؟

Hermes زیادہ تر ES6+ خصوصیات کو سپورٹ کرتا ہے لیکن حدود کے ساتھ: eval، جنریٹرز، اور Proxy دستیاب نہیں ہیں۔ مطابقت کے لیے Babel ٹرانسپائلیشن استعمال کرنے کی سفارش کی جاتی ہے، جیسا کہ عام React Native میں۔

Hermes ایپ کے سائز کو کیسے متاثر کرتا ہے؟

Hermes کمپیکٹ بائٹ کوڈ اور چھوٹے انجن سائز کے ذریعے ایپ کا سائز کم کرتا ہے۔ بائٹ کوڈ عام طور پر مساوی JS کوڈ سے 20–30% زیادہ کمپیکٹ ہوتا ہے، اور انجن خود JSC کے ~2 MB کے مقابلے میں ~250 KB کا ہوتا ہے۔

اگر کوئی لائبریری Hermes کے ساتھ کام نہ کرے تو کیا کریں؟

زیادہ تر لائبریریاں Hermes کے ساتھ مطابقت رکھتی ہیں۔ اگر لائبریری eval، Proxy یا غیر معیاری خصوصیات استعمال کرتی ہے — تو چیک کریں کہ آیا اس کا Hermes-مطابقت ورژن موجود ہے۔ آپ غیر معاون تعمیرات کو تبدیل کرنے کے لیے Babel پلگ ان بھی استعمال کر سکتے ہیں۔

خلاصہ

  • Hermes — Meta کا JavaScript انجن، React Native ایپلیکیشنز کے تیز آغاز کے لیے موزوں۔
  • AOT کمپائلیشن — JS کوڈ بلڈ مرحلے میں بائٹ کوڈ میں کمپائل ہوتا ہے، ڈیوائس پر JIT اوور ہیڈ ختم کرتا ہے۔
  • کارکردگی — JSC کے مقابلے میں شروع ہونے کا وقت 50% کم، میموری استعمال 30–40% کم۔
  • سائز — Hermes ~250 KB (کمپریسڈ)، JSC سے 8–10 گنا چھوٹا۔
  • مطابقت — Hermes JSI اور نئے React Native آرکیٹیکچر (Fabric اور Turbo Modules) کو سپورٹ کرتا ہے۔
  • ڈیبگنگ — Chrome DevTools کے ذریعے دستیاب، بریک پوائنٹس اور پروفائلنگ سمیت۔
  • سفارش — موبائل آلات پر زیادہ سے زیادہ کارکردگی کے لیے React Native 0.70+ سے تمام پروجیکٹس میں Hermes استعمال کریں۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں