سجاد هاشمیان

کد مود اینا…

معرفی موتور Hermes برای React Native

فیسبوک در Chain React 2019، موتور متن‌باز جاوا اسکریپت Hermes رو معرفی کرد که برای React Native بهینه شده تا حجم و زمان راه‌اندازی App رو کاهش بده و حافظه‌اصلی کمتری هنگام استفاده از App اشغال بشه که البته یک مزیت خیلی عالی برای گوشی‌های رده پایین که محدودیت حافظه‌اصلی دارن محسوب میشه.

Hermes Status Compare

مقایسه نتایج Hermes

React Native به صورت پیشفرض از JavaScriptCore استفاده میکنه که برای Android یکسری مشکلات ایجاد کرده. برای مثال به دلیل تغییرات زیاد داخل jscore (که بشه توی Android اجراش کرد) و کمبود منابع، چندین سال از آخرین بروزرسانی اون میگذشت که البته بعد از بروزرسانی jscore مشکلات دیگه‌ای اضافه شد، مثلا حجم App تقریبا دو برابر شدش و یا اینکه موقع Debug کردن موتور v8 مرورگر کروم، جایگزین jscore میشه.

یکی از کارهای مهمی که Hermes انجام میده اینه که موقع خروجی گرفتن از App کدهای جاوااسکریپت رو به Bytecode تبدیل میکنه. یعنی اینکه عمل Parse و Compile کد رو جلو جلو انجام میده که تاثییر زیادی در زمان راه‌اندازی App داره.

What Hermes does

کاری که Hermes انجام میده

البته این کار یکسری محدودیت هم ایجاد میکنه مثلا دیگه نمیشه از متد ()toString برای تبدیل توابع به کدشون استفاده کرد که البته داخل محیط React Native کاربردی نداره. (میتونید ویژگی‌ها و محدودیت‌های دیگه Hermes رو از اینجا دنبال کنید). علاوه بر این Hermes بهینه‌سازی‌هایی دیگه‌ای هم اعمال میکنه، مثلا Stringها رو بصورتی در حافظه‌اصلی بارگذاری میکنه که فراخونیشون سریعتر باشه.

برای فعال کردن Hermes، حداقل React Native نسخه 0.60.2 نیاز هست و اگه دوست دارین که Hermes رو امتحان کنید میتونید این دستورالعمل رو دنبال کنید. همچنین میتونید فیلم معرفی Hermes رو اینجا ببینید.

راستی از اونجایی که این موضوع برام جالب بود، کمی جستجو کردم تا بازخورد کاربرهای دیگه هم بدونم، که با یک موتور جاوااسکریپت دیگه به نام QuickJS آشنا شدم که آقای Bellard همین تازگی‌ها منتشر کرده و خیلی خوب بهینه شده. یکسری ویژگیهای QuickJS که بنظرم جالب اومدن:

  • میتونید کد JavaScript خودتون رو بصورت Stand-alone کامپایل و منتشر کنید. (یعنی دیگه برای مثال وابستگی به node یا غیره ندارید)
  • کد js رو به زبان c تبدیل و بصورت Embed داخل کد c ازش استفاده کنید یا برعکس. (که البته کد c تولید شده خوانایی زیادی نداره و بیشترش Bytecode هست)
  • میتونید کدهای جاواساکریپت رو برای webassemly کامپایل کنید و داخل مرورگر اجراشون کنید.
  • تقریبا بصورت کامل از ES2019 پشتیبانی میکنه.
  • کارایی خیلی خوبی نسبت به رقیب‌های قدیمی خودش داره.

دوستدارم بدونم Hermes و QuickJS نسبت به هم چه سرعتی دارن و اینکه آیا میشه کدهای تولید شده توسط QuickJS رو به React Native متصل کرد؟ کاریشون چقدر بهتره؟

منبع عکس‌های

بدون نظر