Önceden getirme, önceden işleme ve hizmet çalışanı önceden önbelleğe alma

Son birkaç modülde, JavaScript'in yüklenmesini erteleme ve resimler ile <iframe> öğelerinin geç yüklenmesi gibi kavramları keşfettiniz. Kaynak yüklemesini ertelemek, kaynakları önceden yüklemek yerine ihtiyaç duyuldukları noktada indirerek ilk sayfa yükleme sırasında ağ ve CPU kullanımını azaltır. Böylece, kaynaklar kullanılmayabilir. Bu, ilk sayfa yükleme sürelerini iyileştirebilir ancak sonraki etkileşimlerde, güç sağlamak için gereken kaynaklar oluştukları anda yüklenmemişse gecikme yaşanabilir.

Örneğin, bir sayfada özel bir tarih seçici varsa kullanıcı öğeyle etkileşim kurana kadar tarih seçicinin kaynaklarını erteleyebilirsiniz. Bununla birlikte, tarih seçicinin kaynaklarının istek üzerine yüklenmesi, kaynaklar indirilene, ayrıştırılana ve çalıştırılmaya hazır olana kadar bir gecikmeye (kullanıcının ağ bağlantısına, cihaz özelliklerine veya her ikisine bağlı olarak) biraz gecikmeyle sonuçlanabilir.

Bu, dikkat edilmesi gereken bir noktadır. Kullanılmayan kaynakları yükleyerek bant genişliğini boşa harcamak istemezsiniz ancak etkileşimlerin ve sonraki sayfa yüklemelerinin gecikmesi de ideal olmayabilir. Neyse ki bu iki uç nokta arasında daha iyi bir denge kurmak için kullanabileceğiniz pek çok araç vardır. Bu modülde, bu uç noktalar arasında denge kurmak için kullanabileceğiniz bazı teknikler (ör. kaynakları önceden getirme, sayfaların tamamını önceden oluşturma ve bir hizmet çalışanı kullanarak önceden önbelleğe alma) ele almaktadır.

Yakın gelecekte ihtiyaç duyulan kaynakları düşük öncelikte önceden getirin

<link rel="prefetch"> kaynak ipucunu kullanarak resimler, stil sayfaları veya JavaScript kaynakları dahil olmak üzere kaynakları önceden getirmek mümkündür. prefetch ipucu, tarayıcıya bir kaynağın yakın gelecekte gerekli olabileceği bilgisini verir.

prefetch ipucu belirtildiğinde tarayıcı, geçerli sayfa için gereken kaynaklarla rekabet etmekten kaçınmak amacıyla en düşük öncelikte bu kaynak için bir istek başlatabilir.

Kaynakların önceden yüklenmesi, kullanıcı deneyimini iyileştirebilir. Çünkü bu kaynaklar, ihtiyaç duyulduğu anda disk önbelleğinden anında alınabilir. Bu nedenle, kullanıcının yakın gelecekte indirilecek kaynakları beklemesi gerekmez.

<head>
  <!-- ... -->
  <link rel="prefetch" as="script" href="/date-picker.js">
  <link rel="prefetch" as="style" href="/date-picker.css">
  <!-- ... -->
</head>

Önceki HTML snippet'i, tarayıcıya boşta kaldığında date-picker.js ve date-picker.css öğelerini önceden getirebileceğini bildirir. Kullanıcı JavaScript'te sayfayla etkileşimde bulunurken kaynakları dinamik olarak da önceden getirmek de mümkündür.

prefetch, Safari hariç tüm modern tarayıcılarda desteklenir. Safari'de de bu işlev bir bayrak arkasında bulunur. Web sitenizin kaynaklarını tüm tarayıcılarda çalışacak şekilde öncelikli olarak yüklemeniz gerekiyorsa ve bir Service Worker kullanıyorsanız bu modülün ilerleyen bölümlerinde, hizmet çalışanı kullanarak kaynakları önbelleğe alma hakkındaki bölümü okuyun.

Gelecekteki gezinmeleri hızlandırmak için sayfaları önceden getirin

Bir sayfayı ve tüm alt kaynaklarını, HTML belgesine işaret ederken as="document" özelliğini belirterek de önceden getirmek de mümkündür:

<link rel="prefetch" href="/page" as="document">

Tarayıcı boşta kaldığında, /page için düşük öncelikli bir istek başlatabilir.

Chromium tabanlı tarayıcılarda, Speculation rules API'yi kullanarak dokümanları önceden getirebilirsiniz. Spekülasyon Kuralları, sayfanın HTML'sine dahil edilen veya JavaScript aracılığıyla dinamik olarak eklenen bir JSON nesnesi olarak tanımlanır:

<script type="speculationrules">
{
  "prefetch": [{
    "source": "list",
    "urls": ["/page-a", "/page-b"]
  }]
}
</script>

JSON nesnesi, şu anda yalnızca prefetch ve prerender işlemlerini destekleyen bir veya daha fazla işlemi ve bu işlemle ilişkilendirilen URL'lerin listesini tanımlar. Önceki HTML snippet'inde tarayıcıya /page-a ve /page-b öğelerini önceden getirmesi talimatı verilir. <link rel="prefetch"> ile benzer şekilde, spekülasyon kuralları tarayıcının belirli durumlarda yok sayabileceği bir ipucudur.

Hızlı Bağlantı gibi kitaplıklar, sayfa bağlantılarını kullanıcının görüntü alanında görünür hale geldikten sonra dinamik bir şekilde önceden getirerek veya önceden oluşturarak sayfa gezinmelerini iyileştirir. Bu, sayfadaki tüm bağlantıların önceden getirilmesine kıyasla kullanıcının sonunda o sayfaya gitme olasılığını artırır.

Sayfaları önceden oluşturma

Kaynakları önceden getirmenin yanı sıra, tarayıcıya sayfayı kullanıcı gitmeden önce önceden oluşturması için ipucu vermek de mümkündür. Bu sayede, sayfa ve kaynakları arka planda getirilip işlendiğinden sayfa neredeyse anında yüklenir. Kullanıcı sayfaya gittiğinde, sayfa ön plana yerleştirilir.

Önceden oluşturma, Speculation Kuralları API'si aracılığıyla desteklenir:

<script type="speculationrules">
{
  "prerender": [
    {
      "source": "list",
      "urls": ["/page-a", "page-b"]
    }
  ]
}
</script>

Önceden getirme ve önceden işleme demoları

Hizmet çalışanı önbelleğine alma

Hizmet çalışanı kullanarak kaynakları kurgusal olarak önceden getirmek de mümkündür. Hizmet çalışanı önbelleğine alma özelliği, Cache API'yi kullanarak kaynakları getirebilir ve kaydedebilir. Böylece tarayıcının, ağa gitmeden Cache API'yi kullanarak isteği sunmasına izin verilir. Hizmet çalışanı önbelleğine alma, yalnızca önbellek stratejisi olarak bilinen çok etkili bir hizmet çalışanı önbelleğe alma stratejisi kullanır. Bu kalıp son derece etkilidir çünkü kaynaklar hizmet çalışanı önbelleğine yerleştirildikten sonra, istek üzerine neredeyse anında getirilir.

Sayfadan hizmet çalışanına veya önbelleğe alma arasındaki hizmet çalışanı önbelleğe alma akışını gösterir.
Yalnızca önbellek stratejisi, hizmet çalışanı kurulumu sırasında ağdan uygun kaynakları alır. Önbelleğe alınan kaynaklar yüklendikten sonra yalnızca Service Worker önbelleğinden alınır.

Bir hizmet çalışanı kullanarak kaynakları önbelleğe almak için Workbox'ı kullanabilirsiniz. Ancak isterseniz önceden belirlenmiş bir dosya grubunu önbelleğe almak için kendi kodunuzu yazabilirsiniz. Kaynakları önbelleğe almak için bir hizmet çalışanı kullanmaya karar verirken her iki durumda da önbelleğe almanın hizmet çalışanı yüklendiğinde gerçekleştiğini bilmeniz önemlidir. Yükleme işleminden sonra, önbelleğe alınan kaynaklar daha sonra Service Worker'ın web sitenizde kontrol ettiği herhangi bir sayfada geri alınabilir.

Çalışma kutusu, hangi kaynakların önceden önbelleğe alınması gerektiğini belirlemek için bir ön önbellek manifesti kullanır. Önbellek manifesti, önceden önbelleğe alınacak kaynaklar için "doğruluk kaynağı" olarak işlev gören dosyaların ve sürüm oluşturma bilgilerinin bir listesidir.

[{  
    url: 'script.ffaa4455.js',
    revision: null
}, {
    url: '/index.html',
    revision: '518747aa'
}]

Önceki kod, iki dosya içeren bir örnek manifesttir: script.ffaa4455.js ve /index.html. Bir kaynak, dosyanın kendisinde sürüm bilgisi içeriyorsa (dosya karması olarak bilinir) revision özelliği, dosyanın zaten sürümü oluşturulmuş olduğundan (örneğin, önceki kodda script.ffaa4455.js kaynağı için ffaa4455) null olarak bırakılabilir. Sürümü kaldırılmış kaynaklar için derleme sırasında bir düzeltme oluşturulabilir.

Hizmet çalışanı, kurulumdan sonra sonraki sayfada gezinmeleri hızlandırmak amacıyla statik sayfaları veya bunların alt kaynaklarını önbelleğe almak için kullanılabilir.

workbox.precaching.precacheAndRoute([
  '/styles/product-page.ac29.css',
  '/styles/product-page.39a1.js',
]);

Örneğin, bir e-ticaret ürün listeleme sayfasında, ürün ayrıntıları sayfasını oluşturmak için gereken CSS ve JavaScript'i önceden önbelleğe almak amacıyla bir hizmet çalışanı kullanılabilir. Böylece, ürün ayrıntıları sayfasına gitmek çok daha hızlı hale gelir. Önceki örnekte product-page.ac29.css ve product-page.39a1.js verileri ön belleğe alınmış. workbox-precaching ürününde bulunan precacheAndRoute yöntemi, önceden önbelleğe alınan kaynakların gerektiğinde Service Worker API'den getirilmesi için gereken işleyicileri otomatik olarak kaydeder.

Hizmet çalışanları yaygın olarak desteklendiğinden, durumun gerektirdiği tüm modern tarayıcılarda önbelleğe alma özelliğini kullanabilirsiniz.

Bilginizi test etme

prefetch ipucu hangi öncelikte gerçekleşir?

Yüksek.
Tekrar deneyin.
Orta.
Tekrar deneyin.
Düşük.
Doğru.

Bir sayfayı önceden getirmek ile önceden oluşturmak arasındaki fark nedir?

Bir sayfanın hem önceden getirme hem de önceden oluşturma işlemi bir sayfayı ve tüm alt kaynaklarını alırken, önceden getirme yalnızca sayfayı ve tüm kaynaklarını alırken, önceden işleme kullanıcı sayfaya gidene kadar sayfanın tamamını arka planda oluşturarak bir adım daha ileri gider.
Doğru.
Bunlar çoğunlukla aynıdır. Bir sayfanın tüm alt kaynakları yalnızca önceden oluşturma işlemi tarafından alınırken, önceden getirme işlemi yapmaz.
Tekrar deneyin.

Hizmet çalışanı önbelleği ile HTTP önbelleği aynıdır.

Doğru
Tekrar deneyin.
Yanlış
Doğru.

Sıradaki: Web çalışanlarına genel bakış

Artık önceden getirme, önceden oluşturma ve hizmet çalışanı önceden önbelleğe almanın, gelecekteki sayfalara yönelik gezinmeleri hızlandırmak söz konusu olduğunda ne kadar yararlı olabileceğini bildiğinize göre, bunun web siteniz ve kullanıcıları için ne kadar faydalı olabileceğine dair bilgiye dayalı kararlar alabilirsiniz.

Sonraki bölümde, web çalışanlarına genel bir bakış sunulmuştur ve bunların, ana iş parçacığındaki pahalı işleri çıkarıp ana iş parçacığına kullanıcı etkileşimleri için nasıl daha fazla alan bırakabileceği ile ilgili bilgi verilmektedir. Ana iş parçacığına daha fazla alan sağlamak için ne yapabileceğinizi hiç düşündüyseniz sonraki iki modül zaman ayırmaya değer!