Hermes JS Engine Nedir?

Burhan Yılmaz
Kodcular
Published in
4 min readJul 14, 2019

Nedir?

Android’de react native çalıştırmak için optimize edilmiş açık kaynak bir javascript motorudur.

Nasıl çalışır?

Geleneksel Javascript motorları uygulama yüklendikten sonra yani çalışma anında javascript kodlarını derleyerek bytecode üretir. Bu durum uygulama açılışında geçikmelere sebep olur.

Hermes ise uygulamanın oluştulması sırasında bytcode üretir. Bu işlemi daha performanslı yapmak için bolca zamanı vardır.

Ne fayda sağlar?

  • Uygulamanın ilk açılış süresini kısaltır.
  • Uygulama apk’sının boyutunu düşürür.
  • Verimli bellek kullanımı sağlar.
  • Kolay bir şekilde entegre edilebilir.

Hangi platform için tasarlanmıştır?

Sadece android için tasarlanmıştır. Reddit ve twitter’da yazılanlara göre Apple özel olan javascript motorlarına izin vermiyormuş.(Net bir bilgiye ulaşamadım).

twitter reddit

Nasıl kullanılır?

Değişikleri yaptıktan sonra eğer projenizi temizlemezseniz uygulamanız sürekli açılış kısmında çökme yaşayabilir.

Canlıda kullanan uygulamalar var mı?

Facebook kendi canlıda olan uygulamalarında kullanmıştır.

Test uygulamamda aldığım sonuçlar

Uygulamanın repository’si: https://github.com/burhanyilmaz/hermestest

Test edilen cihaz: General Mobile Android One

Açılış süresi

hermes ? “00:01:22” : “00:01:79

Burda çok fark görünmüyor fakat uygulama boyutu arttıkça bunu daha net göreceğinize eminim.

Hermes aktif iken aldığım apk.

Alt kısımda bulunan resimde app bundle’da olan boyut farkını görebilirsiniz(ilki hermes aktif olmadan elde edilen). Bundle içeriklerini incelediğimde hermes aktif değilken js kodlarını okuyabiliyordum. Hermes’i aktifleştirdiğimde ürütilen bundle içeriklerini okuyamıyorum çünkü artık onlar bytecode :) Bu kısma nasıl çalışırda değinmiştik.

Bu resimde genel olarak hermes aktif iken (new size) ve aktif değilken (old size) elde edilmiş olan iki apk arasındaki farkı görebilirsiniz.

Android App Bundle olarak çıktı aldığımda ise aşağıdaki gibi bir sonuç elde ediyorum.
hermes ? app_new.abb : app_old.aab

Bu uygulamayı aab olarak playstore yüklediğimde, kullanıcılar bu uygulamanın boyutu yaklaşık olarak 5mb olarak görecekler. Bu konuya başka yazımda değineceğim.

Yan etkileri neler?

  • Uygulama içinde javascripten kaynaklanan hataların oluşması durumunda crashlytics kullanan ya da benzeri bir hizmet kullananların hatanın neden kaynaklandığını görememesine sebebiyet verebilir(varsayım test edilecek).,

Karşılaşılaşılan sorunlar neler?

  • react-native:0.60.2` versionunda uygulama çıktısı alınamıyor. 0.60.3`bu sorunu çözüyorlar.
  • hermes ile ilgili kod değişikliği yaptığınızda mutlaka projenizi temizlemeniz gerekiyor. Yoksa uygulama açılışta çöküyor.

--

--