Facebook ochiq manbali Hermes JavaScript dvigateli

Facebook ochiq manbali engil JavaScript dvigateli Hermes, ramka asosida ishlaydigan ilovalar uchun optimallashtirilgan Mahalliy javob Android platformasida. Hermesni qo'llab-quvvatlash o'rnatilgan React Native-da bugungi 0.60.2 versiyasidan boshlab. Loyiha mahalliy JavaScript ilovalari uchun uzoq ishga tushirish vaqtlari va sezilarli resurslarni sarflash bilan bog'liq muammolarni hal qilish uchun mo'ljallangan. Kod tomonidan yozilgan C++ tilida va MIT litsenziyasi ostida tarqatiladi.

Hermes-dan foydalanishning afzalliklari orasida dasturni ishga tushirish vaqtining qisqarishi, xotira sarfining kamayishi va dastur hajmining qisqarishi mavjud. V8 dan foydalanganda, eng ko'p vaqt talab qiladigan bosqichlar manba kodini tahlil qilish va uni tezda kompilyatsiya qilish bosqichlari hisoblanadi. Hermes ushbu bosqichlarni qurish bosqichiga olib keladi va ilovalarni ixcham va samarali baytekod shaklida etkazib berishga imkon beradi.

Ilovani to'g'ridan-to'g'ri bajarish uchun SemiSpace axlat yig'uvchisi bilan loyiha doirasida ishlab chiqilgan virtual mashinadan foydalaniladi, u bloklarni faqat kerak bo'lganda tarqatadi (Talab bo'yicha), bloklarni ko'chirish va defragmentatsiya qilishni qo'llab-quvvatlaydi, bo'sh qolgan xotirani operatsion tizimga qaytaradi, vaqti-vaqti bilan. butun uyum tarkibini skanerlash.

JavaScript-ni qayta ishlash bir necha bosqichlarga bo'linadi. Birinchidan, manba matnlari tahlil qilinadi va kodning oraliq tasviri yaratiladi (Hermes IR), vakillik asosida SSA (Statik yagona tayinlash). Keyinchalik, oraliq ko'rinish optimallashtiruvchida qayta ishlanadi, bu dasturning asl semantikasini saqlab qolgan holda birlamchi oraliq kodni yanada samarali oraliq ko'rinishga aylantirish uchun oldinga statik optimallashtirish usullarini qo'llaydi. Oxirgi bosqichda ro'yxatdan o'tgan virtual mashina uchun bayt kodi yaratiladi.

Dvigatelda tomonidan qo'llab -quvvatlanadi ECMAScript 2015 JavaScript standartining bir qismi (yakuniy maqsad uni toʻliq qoʻllab-quvvatlashdir) va koʻpgina mavjud React Native ilovalari bilan moslikni taʼminlaydi. Hermes eval(), bayonotlar, aks ettirish (Reflect va Proxy), Intl API va RegExp-dagi ba'zi bayroqlar bilan mahalliy bajarilishini qo'llab-quvvatlamaslikka qaror qildi. Hermes-ni React Native ilovasida yoqish uchun loyihaga “enableHermes: true” variantini qo‘shish kifoya. Bundan tashqari, Hermes-ni CLI rejimida qurish mumkin, bu sizga buyruq satridan ixtiyoriy JavaScript fayllarini bajarishga imkon beradi. Nosozliklarni tuzatish uchun dangasa kompilyatsiya rejimi mavjud, bu sizga ishlab chiqish jarayonida har safar JavaScript-ni kompilyatsiya qilmaslik, balki qurilmada allaqachon bayt kodini yaratish imkonini beradi.

Shu bilan birga, Facebook Hermesni Node.js va boshqa yechimlarga moslashtirishni rejalashtirmaydi, faqat mobil ilovalarga e'tibor qaratadi (JIT o'rniga AOT kompilyatsiyasi operativ xotirasi cheklangan va Flash tezligi sekinroq bo'lgan mobil tizimlar kontekstida eng maqbuldir). Microsoft xodimlari tomonidan o'tkazilgan dastlabki ishlash testi ko'rsatdiHermes-dan foydalanganda Android uchun Microsoft Office ilovasi 1.1 soniyada foydalanishga tayyor bo'ladi. ishga tushirilgandan so'ng va 21.5 MB RAM iste'mol qiladi, V8 dvigatelidan foydalanganda esa ishga tushirish uchun 1.4 soniya vaqt ketadi va xotira iste'moli 30 MB ni tashkil qiladi.

Qo'shimcha: Facebook chop shaxsiy test natijalari. Hermes-dan MatterMost ilovasi bilan foydalanilganda, ishga kirish vaqti (TTI, Interact vaqti) 4.30 dan 2.01 soniyagacha kamaydi, APK paketining hajmi 41 dan 22 MB gacha, xotira sarfi esa 185 dan 136 gacha kamaydi. MB.

Manba: opennet.ru

a Izoh qo'shish