Anasayfa Haber Hermes JavaScript Motoru, React Native Uygulamalarının Hızını Arttırıyor

Hermes JavaScript Motoru, React Native Uygulamalarının Hızını Arttırıyor

react-native

Facebook, React Native ile yazılan mobil uygulamaların daha da hızlı çalışabilmesi için kendi JavaScript motorunu geliştirdi.

Hermes JavaScript motoru, Ract Native’in hali hazırda kullandığı açık kaynak kodlu JavaScriptCore motorundan çok daha hafif. Ayrıca bu motor, spesifik olarak React Native uygulamalarını hızlandırmak için optimize edilmiş. Bu da Hermes’i kullanan React Native uygulamalarının boyut olarak öncekine oranla daha küçük olacağı ve daha hızlı çalışacağı anlamına geliyor. Facebook’a göre Hermes’i kullanan React Native uygulamaları iki kat daha performanslı çalışıyor.

Hermes’in de açık kaynak kodlu olduğunu belirtmemiz gerek. Geliştiriciler kendi uygulamalarında Hermes’i kullanmak isterlerse bağlantıdaki resmi rehbere göz atabilirler.

Ne yazık ki Hermes şu an için sadece Android tarafında kullanılabiliyor.

React Native bir aplikasyonu Android için hazırlarken JavaScriptCore motorunu da onun içine ilave ediyor. iOS tarafında ise durum biraz daha farklı. JavaScriptCore aynı zamanda iOS’in kendi tarayıcısı olan Safari’de de kullanıldığı için işletim sisteminin içinde hali hazırda mevcut. Bu sebeple iOS için geliştirilen React Native aplikasyonlarında ekstradan JavaScript motoru bulunmuyor. Onun yerine işletim sisteminde mevcut olan motor kullanılıyor. (Belki Hermes’in varlığı ile bu durum ileride değişir.)

Peki JavaScript motorunun optimize edilmesi neden önemli?

Bu soruya cevap verebilmek için önce React Native’in neden var olduğunu ve onun nasıl çalıştığını anlamak gerekiyor.

Günümüzde iki dominant mobil platform var: Android ve iOS. Bu durum hem geliştiriciler, hem de kendi uygulamasına sahip olmak isteyen firmalar için büyük bir sorun. Geliştiriciler ya tek bir platforma yönelerek diğerini unutmayı tercih ediyor, ya da ikisi için de aynı uygulamayı ayrı ayrı yazarak zaman kaybediyor. Firmalar ise bir uygulamaya ihtiyaç duyduklarında, aslında her platfrom için ayrı ayrı olmak üzere iki uygulama edinmek zorunda kalıp büyük masrafların altında kalıyor.

iOS için Objective C veya Swift programlama dillerini bilmeniz, Android için ise Java veya C++ bilmeniz, daha sonra da ilgili  platformun seçtiğiniz dile uygun olarak hazırlanmış olan API’ını (uygulama programlama arayüzünü) öğrenmeniz gerekiyor. Yani aynı uygulamayı iki farklı platforma yazabilmek için minimum iki farklı dili bilmeniz ve iki farklı API’ı öğrenmeniz gerek.

Neyse ki günümüzde bu sorunun üstesinden gelmek için bazı çözümler mevcut. Facebook tarafından açık kaynak kodlu bir proje olarak geliştirilen React Native de onlardan biri. React Native sayesinde ayrı ayrı dilleri ve API’ları öğrenmek zorunda kalmadan, sadece JavaScript programlama dilini ve React Native’in API’ını öğrenerek iki platforma birden tek seferde aplikasyon yazmak mümkün. Bir kere yazılan aplikasyon, iki platformda birden çalışıyor.

Şahane değil mi? Android ve iOS kendi geliştirdikleri araç gereçleri bırakıp React Native’e neden destek vermiyor ki?

Çünkü bu yaklaşımın çok fazla dezavantajı var. Hepsinden tek tek bahsederek konuyu dallandırıp budaklandırmak istemiyorum. O yüzden sadece bir tanesine, yani bu yazıyı hazırlama sebebim olan dezavantaja odaklanacağım: Performans.

Hadi Android için bir uygulama yazdığımızı hayal edelim. Onu hem React Native, hem de C++ ile iki kez yazalım. Uygulma da ekranın merkezinden duran işlevsiz bir butondan ibaret olsun. Butonu ekranda görene kadar neler olup bitiyor görelim.

C++:

  • C++ ile yazılmış ve cihaza yüklenmeden evvel derlenmiş (yani makinenin anlayacağı 0’lara ve 1’lere dönüştürülmüş) olan uygulama Android’e buton çizme direktifi gönderir.
  • Android bu direktifi anlar ve ekrana butonu çizer.

React Native:

  • JavaScript derlenen değil, yorumlanan bir dil. Yani kod satırları program çalışmadan önce değil, çalıştıktan sonra 1’lere ve 0’lara dönüşüyor. Arada anlık olarak tercümanlık yapacak bir katmana ihtiyaç var; yani bir JavaScript motoruna. (JavaScriptCore ve Hermes bu görevi üstleniyor.)
  • Hatırlarsanız artık Andoid’in kendi API’ını değil de React Native API’ını kullanıyorduk. O yüzden bir çeviri işlemine daha ihtiyaç var. React Native Köprüsü denilen bir bileşen, motor tarafından yorumlanan direktifleri Android’in anlayacağa direktiflere çeviriyor ve işletim sistemine gönderiyor.
  • Nihayet uygulamadan direktif alabilmiş olan Android, butonu ekranın ortasında çizmeye başlıyor.

Velhasılkelam, işlem sayısı React Native tarafında daha fazla. Hız karşılaştırması yaparsanız, platformun kendi dili ile yazılan native (yerel) uygulamalar her zaman React Native uygulamalarından daha hızlı olacaktır. React Native’in Hermes gibi daha optimize çalışan bir motora bu yüzden ihtiyacı var. Motor ne kadar hızlı çalışırsa, native uygulama performansına biraz daha yaklaşılmış olunuyor. Darısı iOS’in başına.