Mesin JavaScript Hermes bersumber terbuka Facebook

Mesin JavaScript ringan bersumber terbuka Facebook Hermes, dioptimalkan untuk menjalankan aplikasi berdasarkan kerangka kerja Bereaksi Bawaan pada platform Android. dukungan Hermes bawaan di React Native dimulai dengan rilis 0.60.2 hari ini. Proyek ini dirancang untuk memecahkan masalah dengan waktu startup yang lama untuk aplikasi JavaScript asli dan konsumsi sumber daya yang signifikan. Kode ditulis oleh dalam C++ dan didistribusikan di bawah lisensi MIT.

Keuntungan menggunakan Hermes antara lain pengurangan waktu startup aplikasi, pengurangan konsumsi memori, dan pengurangan ukuran aplikasi. Saat menggunakan V8, tahapan yang paling memakan waktu adalah tahapan parsing kode sumber dan kompilasi on the fly. Hermes membawa langkah-langkah ini ke tahap pembuatan dan memungkinkan aplikasi dikirimkan dalam bentuk bytecode yang ringkas dan efisien.

Untuk menjalankan aplikasi secara langsung, mesin virtual yang dikembangkan dalam proyek digunakan dengan pengumpul sampah SemiSpace, yang mendistribusikan blok hanya sesuai kebutuhan (On-demand), mendukung pemindahan dan defragmentasi blok, mengembalikan memori yang dibebaskan ke sistem operasi, tanpa secara berkala memindai isi seluruh tumpukan.

Pemrosesan JavaScript dibagi menjadi beberapa tahap. Pertama, teks sumber diuraikan dan representasi perantara dari kode tersebut dihasilkan (Hermes IR), berdasarkan representasi SSA (Tugas Tunggal Statis). Selanjutnya, representasi perantara diproses dalam pengoptimal, yang menerapkan teknik optimasi statis ke depan untuk mengubah kode perantara utama menjadi representasi perantara yang lebih efisien sambil mempertahankan semantik asli program. Pada tahap terakhir, bytecode untuk mesin virtual terdaftar dibuat.

Di dalam mesin didukung oleh bagian dari standar JavaScript ECMAScript 2015 (tujuan utamanya adalah untuk mendukungnya sepenuhnya) dan menyediakan kompatibilitas dengan sebagian besar aplikasi React Native yang ada. Hermes telah memutuskan untuk tidak mendukung eksekusi lokal eval(), dengan pernyataan, refleksi (Reflect dan Proxy), Intl API dan beberapa flag di RegExp. Untuk mengaktifkan Hermes dalam aplikasi React Native, cukup tambahkan opsi “enableHermes: true” ke proyek. Dimungkinkan juga untuk membangun Hermes dalam mode CLI, memungkinkan Anda mengeksekusi file JavaScript sewenang-wenang dari baris perintah. Mode kompilasi malas tersedia untuk debugging, yang memungkinkan Anda tidak mengkompilasi JavaScript setiap saat selama proses pengembangan, tetapi untuk menghasilkan bytecode dengan cepat yang sudah ada di perangkat.

Pada saat yang sama, Facebook tidak berencana untuk mengadaptasi Hermes untuk Node.js dan solusi lainnya, hanya berfokus pada aplikasi seluler (kompilasi AOT daripada JIT adalah yang paling optimal dalam konteks sistem seluler, yang memiliki RAM terbatas dan Flash lebih lambat). Pengujian kinerja awal dilakukan oleh karyawan Microsoft terungkapbahwa saat menggunakan Hermes, aplikasi Microsoft Office untuk Android tersedia untuk digunakan dalam 1.1 detik. setelah startup dan mengkonsumsi RAM 21.5MB, sedangkan jika menggunakan mesin V8 membutuhkan waktu 1.4 detik untuk memulai dan konsumsi memori 30MB.

Tambahan: Facebook diterbitkan hasil tes sendiri. Saat menggunakan Hermes dengan aplikasi MatterMost, waktu untuk memulai ketersediaan untuk bekerja (TTI, Time To Interact) berkurang dari 4.30 menjadi 2.01 detik, ukuran paket APK berkurang dari 41 menjadi 22 MB, dan konsumsi memori dari 185 menjadi 136 MB.

Sumber: opennet.ru

Tambah komentar