Uyarlanabilir yükleme: Yavaş cihazlarda web performansını iyileştirme

Sitelerinizi belirli donanım ve ağ kısıtlamalarına göre optimize ederek her kullanıcının mümkün olan en iyi deneyimi yaşamasını nasıl sağlayacağınızı öğrenin.

Milica Mihajlija
Milica Mihajlija

Cihaz özellikleri ve ağ bağlantıları önemli ölçüde farklılık gösterir. İleri teknoloji cihazlarda kullanıcıları memnun eden siteler, düşük kaliteli sitelerde kullanışsız olabilir. Hızlı ağlarda sorunsuz yüklenen siteler yavaş ağlarda durma noktasına gelebilir. Her kullanıcı yavaş bir web sitesi ile karşılaşabilir. Bu nedenle, "herkes için tek boyutlu" çözümler geliştirmek her zaman işe yaramayabilir.

Chrome Dev Summit konuşmasında Google'dan Addy Osmani ve Facebook'tan Nate Schloss bu soruna bir çözüm bulmaya çalışıyor. Bu çözüm, çeşitli kullanıcı kısıtlamalarına daha iyi uyum sağlayan sayfalar sunmak için bir kalıp oluşturuyor. Buna uyarlanabilir yükleme denir.

Uyarlanabilir yükleme nedir?

Uyarlanabilir yükleme, farklı kullanıcılara ağ ve donanım kısıtlamalarına göre farklı deneyimler sunmayı içerir. Özellikle:

  • Tüm kullanıcılar için hızlı bir temel deneyim (düşük teknolojili cihazlar dahil).

  • Kullanıcının ağı ve donanımı bunu karşılayabiliyorsa yalnızca ileri teknolojiye yönelik özelliklerin kademeli olarak eklenmesi.

Belirli donanım ve ağ kısıtlamalarına göre optimizasyon yaparak her kullanıcının, cihazında mümkün olan en iyi deneyimi elde etmesini sağlarsınız. Deneyimi kullanıcıların kısıtlamalarına göre özelleştirmek şunları içerebilir:

  • Yavaş ağlarda düşük kaliteli görüntü ve videolar sunuluyor.

  • Düşük özellikli cihazlarda animasyonların kare hızını azaltma.

  • Düşük teknolojili cihazlarda işlem açısından pahalı olan işlemlerden kaçınma.

  • Yavaş cihazlarda üçüncü taraf komut dosyalarını engelleme.

  • Yalnızca hızlı CPU'larda etkileşim için kritik olmayan JavaScript yükleniyor.

Tarayıcı desteği ve uyarlanabilir yüklemenin nasıl uygulanacağı

Uyarlanabilir yükleme için kullanabileceğiniz sinyaller aşağıda listelenmiştir. Her sinyal için tarayıcı desteği de sunulur:

navigator.deviceMemory özelliği, düşük teknolojili cihazlarda bellek tüketimini azaltmak için kullanılır.

Tarayıcı Desteği

  • 63
  • 79
  • x
  • x

Kaynak

navigator.hardwareConcurrency özelliği CPU çekirdek sayısıdır. Maliyetli JavaScript yürütmelerini sınırlandırmak ve bir cihaz bunu iyi bir şekilde işleyemediğinde CPU yoğun mantığını azaltmak için kullanılır.

Tarayıcı Desteği

  • 37
  • 15
  • 48
  • x

Kaynak

NetworkInformation.effectiveType

navigator.connection.effectiveType özelliği, daha az bant genişliği kullanacak şekilde veri aktarımına ince ayar yapmak için kullanılır.

Tarayıcı Desteği

  • 61
  • 79
  • x
  • x

Kaynak

NetworkInformation.saveData

navigator.connection.saveData özelliği, kullanıcının Veri Tasarrufu tercihlerinden yararlanmak için kullanılır.

Tarayıcı Desteği

  • 49
  • ≤79
  • x
  • x

Kaynak

Kullanıcılara ne sunacağınıza karar verebileceğiniz iki yer vardır: istemci ve sunucu. İstemcide, yukarıda belirtilen JavaScript API'leriniz vardır. Sunucuda, kullanıcının cihaz özellikleri ve bağlı olduğu ağ hakkında bilgi edinmek için istemci ipuçlarını kullanabilirsiniz.

Tepki'de uyarlanabilir yükleme

React Uyarlanabilir Yükleme Kancaları ve Yardımcı Programlar, sitelerinizi alt segment cihazlara uyarlamayı kolaylaştıran, React ekosistemine yönelik bir pakettir. Şunları içermektedir:

  • Ağ durumuna (slow-2g, 2g, 3g veya 4g) göre uyarlama yapmak için useNetworkStatus() kancası.

  • Kullanıcının Veri Tasarrufu tercihlerine göre uyarlamak için useSaveData() kancası.

  • Kullanıcının cihazındaki mantıksal CPU işlemci çekirdeği sayısına göre uyarlama yapmak için useHardwareConcurrency() kancası.

  • Kullanıcının cihaz belleğine (RAM) göre uyarlamak için useMemoryStatus() kancası.

Her kanca, başlangıç değerinin ayarlanması için isteğe bağlı bir bağımsız değişkeni kabul eder. Bu seçenek iki senaryoda kullanışlıdır: Kullanıcının tarayıcısı ilgili API'yi desteklemediğinde ve sunucudaki başlangıç değerini ayarlamak için istemci ipucu verilerini kullanabileceğiniz sunucu tarafında oluşturma işlemi için. Örneğin useNetworkStatus() kancası, sunucu tarafı oluşturma için istemci ipucundan geçirilen ilk değeri kullanabilir ve istemcide yürütüldüğünde ağ etkili türü değişirse kendini güncelleyebilir.

Tepki Uyarlanabilir Yükleme Kancaları ve Yardımcı Programları, web platformu API'leri (Ağ Bilgileri, Cihaz Belleği ve Donanım Eşzamanlılığı) kullanılarak uygulanır. Uyarlanabilir yükleme kavramlarını Angular, Vue ve diğer çerçevelere ve kitaplıklara uygulamak için aynı API'leri kullanabilirsiniz.

Uyarlanabilir yüklemenin işleyiş şekli

Bu bölümde, uyarlanabilir yüklemeyi nasıl kullanabileceğinize ilişkin demolar ve Facebook, eBay, Tinder gibi sitelerden alınan gerçek örnekler incelenmektedir.

Tepki Filmi demosu, medya sunumunu ağ durumuna göre nasıl uyarlayacağınızı gösterir. Bu, posterler, özetler ve oyuncu listeleri gösteren filmlere göz atmak için kullanılan bir uygulamadır. Kullanıcının etkili bağlantı türüne bağlı olarak, hızlı bağlantılarda yüksek kaliteli posterler, yavaş bağlantılarda düşük kaliteli posterler sunar.

Twitter'da, kullanılan veri miktarını azaltmak için tasarlanmış bir Veri Tasarrufu modu bulunur. Bu modda önizleme resimleri düşük çözünürlüklü olarak, büyük resimler ise yalnızca önizlemeye dokunduğunuzda yüklenir. Bu seçenek etkinleştirildiğinde iOS ve Android'deki kullanıcılar resimlerden% 50 veri kullanımı, web'deki kullanıcılar ise %80 tasarruf etti. Twitter zaman çizelgesini kopyalamak için Veri Kaydet kancasını kullanan bir React demosunu burada bulabilirsiniz. DevTools panelinizi açmayı ve Verileri Kaydet özelliği devre dışıyken kaydırma sırasında aktarılan veri miktarı ile bu özelliğin etkin olduğu zamanların farkına bakmayı deneyin.

Twitter zaman çizelgesinde Veri Tasarrufu'nun açık ve kapalı olarak kaydırılmasını karşılaştıran bir ekran video kaydı. Veri Tasarrufu açıkken yalnızca resim önizlemeleri yüklenir ve videolar otomatik olarak oynatılmaz.

eBay, kullanıcıların donanımı veya ağ koşulları iyi desteklemediğinde yakınlaştırma gibi özellikleri koşullu olarak açıp kapatır. Bunu, daha yüksek etkileşimli bileşenleri koşullu olarak yüklemenin veya ileri teknoloji cihazlarda daha fazla işlem yüküne sahip işlemler yürütmenin ve bu komut dosyalarını yavaş cihazlardaki kullanıcılara göndermenin bir yolu olan uyarlanabilir kod bölme ve kod yükleme yoluyla elde edebilirsiniz. Addy'nin bir demo eBay ürün sayfasında React.lazy() ve Suspense ile uygulanan bu kalıbı gösterdiği 16 dakikalık videoya göz atın.

Düşük teknolojili ve ileri teknoloji cihazlarda bir ürün sayfası için gönderilen modüllerin şeması: Her iki sürümde de

Tinder, bu deneyimi herkes için hızlı tutmak amacıyla web ve Lite uygulamasında bir dizi uyarlanabilir yükleme kalıbı kullanmaktadır. Kullanıcı yavaş bir ağdaysa veya Veri Tasarrufu'nu etkinleştirmişse video otomatik oynatma özelliğini devre dışı bırakır, yönlendirme önceden getirme özelliğini sınırlandırır ve banttaki bir sonraki resmin yüklenmesi, kullanıcılar ekranı kaydırdıkça resimleri tek tek yükleyecek şekilde sınırlandırır. Bu optimizasyonları uyguladıktan sonra, Endonezya gibi ülkelerde ortalama kaydırma sayısında önemli artışlar gözlemlediler.

Tinder sohbetinin iki sürümünün ekran görüntüsü: otomatik oynatılan video ve oynat düğmesi yer paylaşımlı bir video. "Veri Tasarrufu veya 3G'de dönen resimleri sınırla" başlıklı bir Tinder profilinin ekran görüntüsü. Yalnızca 4G'de görüntü alanındaki videoları önceden getirmek için kullanılan kod snippet'i.

Facebook'ta uyarlanabilir yükleme

Uyarlanabilir yüklemede karşılaşılan sorunlardan biri, cihazların mevcut sinyallere göre üst düzey ve alt uç sınıflara göre gruplandırılmasıdır. Mobil cihazlarda kullanıcı aracısı (UA) dizesi, Facebook'un mobil cihazları sınıflara ayırmak için cihaz özellikleriyle ilgili herkese açık verileri kullanmasına olanak tanıyan cihaz adını sağlar. Ancak masaüstü cihazlarda UA'nın sağladığı tek alakalı bilgi cihazın işletim sistemidir.

Facebook, masaüstü cihazları gruplandırmak için performans izleme sürecinde işletim sistemi, CPU çekirdekleri (navigator.hardwareConcurrency tarafından) ve RAM belleği (navigator.deviceMemory) ile ilgili verileri günlüğe kaydeder. Farklı donanım ve performans türleri arasındaki ilişkilere bakarak cihazları beş kategoriye ayırdılar. Performans izlemeye entegre donanım sınıfları sayesinde, kullanıcıların cihazlarına bağlı olarak Facebook ürünlerini nasıl kullandığına dair daha kapsamlı bir fikir edinebilir ve regresyonları daha kolay tespit edebilir.

24 dakikalık videoya göz atın. Bu videoda Nate, Facebook'un cihaz gruplamaya yaklaşımını açıklıyor, animasyonlar ve JavaScript'i yüklemek için uyarlanabilir yüklemeyi kullanıyor.

Uyarlanabilir yükleme hakkında daha fazla bilgi

Uyarlanabilir yükleme, sitelerinizi kapsayıcılığı göz önünde bulundurarak tasarlamakla ilgilidir. Herkes için ideal bir temel deneyim oluşturun, ardından kullanıcı yeterli belleğe, CPU'ya veya hızlı bir ağa sahipse uygulamayı daha da iyi hale getirecek özellikleri açıp kapatın ya da katmanlara ayırın. Uyarlanabilir yükleme hakkında daha fazla bilgi edinmek için mevcut demolara göz atın ve Chrome Geliştirici Zirvesi konuşmasını izleyin: