Flutter Hot Reload Özelliği: Faydaları ve Performans Açıklaması
Yayınlanan: 2023-09-14Flutter Hot Reload , Google'ın çerçevesinin çok aranan bir özelliğidir ve geliştiricilerin uygulamayı yeniden başlatmaya gerek kalmadan kod değişiklikleri yapmasına ve sonuçları neredeyse anında görmesine olanak tanır. Bu özellik, uygulamanın tasarımının hızla yinelenmesini ve iyileştirilmesini, farklı kullanıcı arayüzü düzenleri ve yapılandırmalarıyla denemeler yapılmasını, hataların düzeltilmesini ve en önemlisi geliştirme süresinin önemli ölçüde azaltılmasını kolaylaştırır. Sonuç olarak Hot Reload, gerçek zamanlı kod değişikliklerine ve anında güncellemelere izin vererek geliştirme sürecini daha verimli ve işbirlikçi hale getirerek Flutter uygulama geliştirme şirketine büyük fayda sağlayabilir.
Flutter Hot Reload özelliği, geliştiricilerin, uygulamanın tam olarak yeniden başlatılmasına gerek kalmadan, kodda yaptıkları değişikliklerin emülatöre veya cihaza yansıdığını anında görmelerini sağlar. Bu makale görünüşte basit bir soruyu yanıtlamayı amaçlıyor: Hızlı Yeniden Yükleme için 'neredeyse anında' ne anlama geliyor? Yani farklı boyutlardaki projelerde bu Flutter özelliği ne kadar hızlı çalışıyor? Daha büyük projeler üzerinde çalışırken ne beklenmelidir, peki ya daha küçük projeler? Çalışırken Yeniden Yükleme tüm bu senaryolarda iyi çalışıyor mu? Hadi bulalım!
Flutter Hot Reload'ı Anlamak
Temel bilgilerle ve gerekli sorumluluk reddi beyanlarıyla başlayalım. Çalışırken Yeniden Yükleme özelliğini açıklarken Dart VM'nin, kodu yerel makine koduna dönüştürmek için JIT (Tam Zamanında) derleyicisini kullandığını vurgulamak önemlidir; bu işlem, programın yürütülmesinden hemen önce gerçekleşir. JIT, kod tahminine dayalıdır çünkü dinamik çalışma zamanı bilgilerine erişime sahiptir; bu da geliştiricilere belirli bir işlevin hiçbir yerde kullanılmadığı konusunda bilgi vermek gibi zaman kazandıran çözümlere yol açar.
Çalışırken Yeniden Yükleme, widget ağacını yeniden oluşturur ancak uygulama durumunu olduğu gibi korur. Çalışırken Yeniden Yükleme özelliğini kullanırken, `main()` ve `initState()` işlevleri çağrılmaz. Bu işlevleri yeniden oluşturmanız gerekiyorsa Hızlı Yeniden Başlatma veya Tam Yeniden Başlatma seçeneğini kullanmalısınız:
- Sıcak Yeniden Başlatma: korunan durumun yok edildiği varsayılan/başlangıç durumundan başlayarak proje uygulamasının kaynak kodunun yeniden derlenmesini tetikleyen araç. Bu araç Tam Yeniden Başlatmadan çok daha hızlıdır ancak Çalışırken Yeniden Yüklemeden daha fazla zaman alır.
- Tam Yeniden Başlatma: Uygulama projesini sıfırdan oluşturan araç, aynı zamanda "Soğuk başlatma" olarak da adlandırılır.
Ek olarak, zaman zaman geliştiricilerin Hızlı Yeniden Yükleme yerine Otomatik Yeniden Başlatma özelliğini kullanması gerekir, örneğin:
- Uygulama arka planda çok uzun süre kalırsa ve/veya kapatılacaksa,
- Dart dosyasındaki numaralandırılmış tür normal sınıflara dönüştürülürse (veya tersi),
- Yerel kod değiştirilirse,
- Genel tür bildirimi değiştirildikten sonra.
Flutter Hot Reload yalnızca hata ayıklama modunda gerçekleştirilebilir. Profil modu ve serbest bırakma modu gibi diğer derleme modları, Çalışırken Yeniden Yükleme özelliğini desteklemez.
Proje Ölçeği ve Flutter Çalışırken Yeniden Yükleme Performansı Karşılaştırması
Flutter projelerinin boyutları, içerdiği kitaplıkların miktarına, uygulama mimarisine, medya dosyalarına veya uygulama özelliklerine göre değişir. Yakın zamana kadar Flutter'ın MVP'ler ve PoC'ler için mükemmel bir çözüm olduğu düşünülüyordu. Bununla birlikte, Google Pay, eBay, Nubank, Rive veya 47 milyon kullanıcıya sahip Maya Bank gibi büyük ölçekli Flutter projeleri ivme kazandıkça, Flutter'ın karmaşık uygulamalara yönelik olanaklarını keşfetmek de hayati önem taşıyor.
Flutter'ın Çalışırken Yeniden Yükleme özelliği, hem Konsept Kanıtı (PoC) uygulamaları hem de kurumsal düzeydeki dijital ürünler için kullanılabilir. Ancak karmaşık projeler için performansının tatmin edici olup olmadığı ve kurumsal uygulamalar için Flutter'ın uygun bir seçim olup olmadığı sorusu hala devam ediyor. Bunu daha ayrıntılı olarak inceleyelim!
Çalışırken Yeniden Yükleme Performansı Deneyi
İlk olarak, farklı kullanım durumlarında Hot Reload'un yaklaşık, ortalama performansını belirlemek için belirli miktarda kitaplık içeren 5 test projesini incelemeye karar verdim:
- Test Projesi 1: 1 000 kütüphane
- Test Projesi 2: 5 000 kütüphane
- Test Projesi 3: 10.000 kütüphane
- Test Projesi 4: 25.000 kütüphane
- Test Projesi 5: 50.000 kütüphane
Bir projenin bu kadar çok sayıda kütüphaneye sahip olmasının pek olası olmadığını anlıyorum, ancak bunu beş spesifik projedeki eğilimleri izlemek için bir test olarak kullanıyoruz.
Aşağıdaki cihaz özellikleriyle bir deney gerçekleştirilmiştir:
- MacBook Pro, 2-3 GHz Dört Kodlu Intel Core i5, 16 GB 2133 MHz LPDDR3, Intel Iris Plus Grafik Kartı 655 1536 MB,
- Visual Studio Kodu, Sürüm: 1.68.1,
- Simülatör: Iphone 12 Pro Max – iOS 15.5 (Xcode Sürümü: 13.4.1),
- Flutter SDK (Kanal kararlı, 3.7.0).
Belirli yeniden yükleme sürelerinin donanımınıza veya sisteminize bağlı olarak değişeceğini lütfen unutmayın. Aşağıdaki cihaz özellikleriyle bir deney gerçekleştirilmiştir. Ancak genel eğilim ve sonuçlar aynı kalmalıdır.
Deneyin amacı, test amacıyla ilgili sayıda kitaplığın oluşturulduğu her projede Hızlı Yeniden Yükleme özelliğinin gerçekleştirilmesinin ne kadar sürdüğünü göstermekti. Her kütüphane belirli bir sınıfı içerir. Bu şekilde kütüphanelerin miktarı, yeniden yüklenmesi beklenen sınıfların sayısına karşılık gelir. Aşağıda 10.000 sınıf içeren Test Projesi 3'ün bir örneği bulunmaktadır. “placeholderX”.dart adı verilen her kitaplık, bir kapsayıcı olan basit bir Durum Bilgisiz Widge sınıfı “placeholderX” içerir:
Konteynerin rengi, “Sabitler” sınıfındaki “constants.dart” kütüphanesinde bildirilen bir değişkendir ve “yer tutucular” kütüphanelerini test etmek için oluşturulan aşağıdakilere basitçe bağlanır.
Flutter Sıcak Yeniden Yükleme Testi Sonuçları
Artık deneyin tüm değişkenlerini ve hedeflerini belirlediğimize ve süreci açıkladığımıza göre, sonuçları özetlemenin zamanı geldi. 5 Flutter Hot Reload performans testinin etkilerini görelim.
Test 1: 1.000 sınıfın yeniden yüklenmesi
Test 2: 5.000 sınıfın yeniden yüklenmesi
Test 3: 10.000 sınıfın yeniden yüklenmesi
Test 4: 25.000 sınıfın yeniden yüklenmesi
Test 5: 50.000 sınıfın yeniden yüklenmesi
Test 1: 1.000 sınıf | Test 2: 5.000 sınıf | Test 3: 10.000 sınıf | Test 4: 25.000 sınıf | Test 5: 50.000 sınıf | |
50 yeniden oluşturma sırasında Ortalama Otomatik Yeniden Yükleme Süresi | 0,86804 saniye | 4,45132 saniye | 7.538 saniye | 25,6295 saniye | 139.676 saniye |
Aşağıdaki grafik, farklı proje ölçekleri arasındaki Hızlı Yeniden Yükleme süresini karşılaştırmaktadır:
Açıkçası, belirli bir proje ölçeği için Hızlı Yeniden Yükleme özelliğinin ortalama süresi, daha fazla sayıda kitaplık (sınıf) nedeniyle artmaktadır.
Ancak aşağıdaki tabloya yakından baktığınızda ve yalnızca ilk 3 proje testini dikkate aldığınızda, Hot Reload'ın özel kullanımına ilişkin ayrıntılı değerleri fark edebilirsiniz:
Test Sonuçlarının Açıklaması
Test sonuçları, Hot Reload Flutter özelliğinin aynı anda 1.000 sınıfı yeniden oluştururken etkili olduğunu, ortalama sürenin 1 saniye sınırında salındığını, çoğu zaman tabloya göre bu değere bile ulaşmadığını doğrulamaktadır. Bu nedenle, çoğu gerçek hayattaki durumda, Hızlı Yeniden Yükleme kesinlikle güvenli bir seçimdir; örneğin:
- tek bir sınıfın yeniden yüklenmesi,
- müşterilerle canlı toplantılar gerçekleştirmek (örneğin yeni fikirleri test ederken),
- eşli programlama veya beyin fırtınası sırasında.
Sonuçlara geçmeden önce bir şeyin altını çizmek istiyorum. Lütfen testimde listelenen tüm kütüphaneleri (sınıfları) aynı anda yeniden yüklediğimi unutmayın. Ortalama geliştirme süreci boyunca bu kadar çok sayıda kütüphanenin yeniden yüklenmesi neredeyse hiç gerekli değildir.
Geliştirici deneyimime (ve test sonuçlarına) dayanarak, daha az kitaplığın yeniden yüklenmesi gecikme sorunlarından kaçınmanıza olanak tanıyacaktır. Kitaplıkların yeniden yüklenmesinin sıklıkla istenmeyen hata veya kod sorunları riskini en aza indirdiğini ve bir projede yapılan değişikliklerin izlenmesini çok daha kolay hale getirdiğini belirtmeye bile gerek yok.
Flutter Hot Reload: Performans Açıklaması
Flutter Hot Reload özelliği, geliştirme aşamasında kullanıcı arayüzü ile ilgili sorunları çözerken kullanışlı olan güçlü ve etkili bir araçtır. Yukarıdaki deneyde kanıtlandığı gibi, çoğu durumda Hızlı Yeniden Yükleme performansı kusursuzdur; tek bir kullanıcı arayüzü değişikliği bir saniyeden kısa sürer ve ortalama 1.000 sınıfın yeniden yüklenmesi 1 saniye kadar kısa bir sürede gerçekleşir.
Üstelik bir deney, Flutter'ın , ortalama Hızlı Yeniden Yükleme süresinin 8 saniyeden az olduğu, binlerce sınıfa sahip, kurumsal boyuttaki büyük projeleri yeniden yükleyebildiğini kanıtladı. Devasa projelerde (50 000 sınıf senaryosu) Hot Reload performansı tamamen tatmin edici olmasa da, Flutter bunlarla mükemmel bir şekilde başa çıkabilmektedir.
Kuşkusuz Flutter Hot Reload, projenin widget ağacındaki widget'ları yeniden oluşturarak iş verimliliğini artırıyor ve göz açıp kapayıncaya kadar istenen sonuçlara ulaşmayı kolaylaştırıyor. Hot Reload sayesinde Flutter geliştiricileri karmaşık tasarım değişikliklerini (tüm uygulamayı etkileyen değişiklikleri bile) zamanında gerçekleştirebilmektedir.
Son olarak, Hot Reload, genel çerçeve performansına katkıda bulunan faktörlerden sadece bir tanesidir (Flutter topluluğu tarafından sürekli olarak doğrulanır ve Flutter Dev tarafından geliştirilir). En iyi Flutter geliştirme araçlarını keşfetmek, yüksek kaliteli platformlar arası mobil uygulamaları verimli bir şekilde oluşturmak için çok önemlidir. Bu nedenle Flutter'daki performansı hem deneyler ve testler yoluyla hem de ticari müşteri projelerinde keşfetmenizi şiddetle tavsiye ediyorum. Miquido'da yaptığımız da budur; hem PoC hem de kurumsal düzeyde platformlar arası uygulama geliştirme projelerinden oluşan portföyümüzü istikrarlı bir şekilde büyütüyoruz.