Enjin JavaScript Hermes sumber terbuka Facebook

Enjin JavaScript ringan sumber terbuka Facebook Hermes, dioptimumkan untuk menjalankan aplikasi berdasarkan rangka kerja React Native pada platform Android. sokongan Hermes terbina dalam dalam React Native bermula dengan keluaran 0.60.2 hari ini. Projek ini direka untuk menyelesaikan masalah dengan masa permulaan yang lama untuk aplikasi JavaScript asli dan penggunaan sumber yang ketara. Kod ditulis oleh dalam C++ dan diedarkan di bawah lesen MIT.

Antara kelebihan menggunakan Hermes, terdapat pengurangan masa permulaan aplikasi, pengurangan penggunaan memori dan pengurangan saiz aplikasi. Apabila menggunakan V8, peringkat yang paling memakan masa ialah peringkat menghuraikan kod sumber dan menyusunnya dengan cepat. Hermes membawa langkah-langkah ini ke peringkat binaan dan membenarkan aplikasi dihantar dalam bentuk kod bait yang padat dan cekap.

Untuk melaksanakan aplikasi secara langsung, mesin maya yang dibangunkan dalam projek digunakan dengan pengumpul sampah SemiSpace, yang mengedarkan blok hanya seperti yang diperlukan (Atas permintaan), menyokong pergerakan dan penyahfragmentasi blok, mengembalikan memori yang dibebaskan ke sistem pengendalian, tanpa secara berkala mengimbas kandungan keseluruhan timbunan.

Pemprosesan JavaScript dibahagikan kepada beberapa peringkat. Pertama, teks sumber dihuraikan dan perwakilan perantaraan kod dijana (Hermes IR), berdasarkan perwakilan SSA (Tugas Tunggal Statik). Seterusnya, perwakilan perantaraan diproses dalam pengoptimum, yang menggunakan teknik pengoptimuman statik ke hadapan untuk mengubah kod perantaraan utama menjadi perwakilan perantaraan yang lebih cekap sambil mengekalkan semantik asal program. Pada peringkat terakhir, kod bait untuk mesin maya berdaftar dijana.

Dalam enjin disokong oleh sebahagian daripada standard JavaScript ECMAScript 2015 (matlamat utama adalah untuk menyokong sepenuhnya) dan menyediakan keserasian dengan kebanyakan aplikasi React Native sedia ada. Hermes telah memutuskan untuk tidak menyokong pelaksanaan tempatan eval(), dengan pernyataan, refleksi (Refleksi dan Proksi), API Antarabangsa dan beberapa bendera dalam RegExp. Untuk mendayakan Hermes dalam aplikasi React Native, cuma tambah pilihan "enableHermes: true" pada projek. Ia juga mungkin untuk membina Hermes dalam mod CLI, membolehkan anda melaksanakan fail JavaScript sewenang-wenangnya dari baris arahan. Mod kompilasi malas tersedia untuk penyahpepijatan, yang membolehkan anda tidak menyusun JavaScript setiap kali semasa proses pembangunan, tetapi untuk menjana kod bait dengan segera sudah ada pada peranti.

Pada masa yang sama, Facebook tidak bercadang untuk menyesuaikan Hermes untuk Node.js dan penyelesaian lain, hanya memfokuskan pada aplikasi mudah alih (kompilasi AOT dan bukannya JIT adalah paling optimum dalam konteks sistem mudah alih, yang mempunyai RAM terhad dan Flash yang lebih perlahan). Ujian prestasi awal yang dijalankan oleh pekerja Microsoft mendedahkanbahawa apabila menggunakan Hermes, aplikasi Microsoft Office untuk Android menjadi tersedia untuk digunakan dalam masa 1.1 saat. selepas permulaan dan menggunakan 21.5MB RAM, manakala apabila menggunakan enjin V8 ia mengambil masa 1.4 saat untuk dimulakan dan penggunaan memori ialah 30MB.

Tambahan: Facebook diterbitkan keputusan ujian sendiri. Apabila menggunakan Hermes dengan aplikasi MatterMost, masa untuk memulakan ketersediaan untuk kerja (TTI, Time To Interact) berkurangan daripada 4.30 kepada 2.01 saat, saiz pakej APK dikurangkan daripada 41 kepada 22 MB dan penggunaan memori daripada 185 kepada 136 MB.

Sumber: opennet.ru

Tambah komen