Ön Yükleme, Ön Bağlantı, Ön Getirme: Kaynak İpuçları ile Sitenizin Performansını İyileştirin

Yayınlanan: 2022-05-04

Modern web tarayıcıları, web sitenizin genel performansını iyileştirmek için her türlü farklı tekniği kullanır - en önemli kaynaklara öncelik vermekten ve bunları ilk önce getirmekten, kullanıcının bir sonraki hangi sayfayı ziyaret edeceğini tahmin etmeye kadar.

Ancak, sitenizin performansıyla ilgili tüm kararları almak için olabilecekleri kadar gelişmiş tarayıcılara güvenmemelisiniz.

Bir web sitesi sahibi olarak, hangi kaynakların en önemli olduğunu ve sitenizdeki gerçek kullanıcı yolculuğunun ne olduğunu bilen kişi sizsiniz. Web sitenizin genel performansını, algılanan hızını ve kullanıcı deneyimini iyileştirmek için bu bilgiyi tarayıcıların sayfalarınızı daha hızlı yüklemesine yardımcı olmak için kullanabilirsiniz.

Kaynak ipuçlarının geldiği yer burasıdır.

İlerleyen satırlarda bunlara ve avantajlarından en iyi şekilde nasıl yararlanılacağına göz atacağız.

Hadi buna dalalım.


Tarayıcılar Nasıl Çalışır (Özetle)


Kaynak ipuçlarını ve bunların uygulanabilir olduğu yerleri daha iyi anlamak için tarayıcıların içeriği nasıl yüklediğine hızlıca bir göz atalım.

Sorumluluk Reddi: Aşağıdaki birkaç satır, tarayıcıların nasıl çalıştığının aşırı basitleştirilmiş halidir. Sürecin derinliklerine dalmak istiyorsanız, bu makaleye göz atmalısınız - Sayfayı doldurma: tarayıcılar nasıl çalışır.


Bir tarayıcının bir sayfayı yükleme sürecini üç adıma bölebiliriz:

  • Bağlantı kuruluyor;
  • Kodun indirilmesi, ayrıştırılması ve işlenmesi;
  • Sayfayı interaktif hale getirmek;

İlk aşamada, tarayıcının kaynakları indirebilmesi için sunucuyla bağlantı kurması gerekir. Buna etki alanı adının aranması ve bir IP adresine çözümlenmesi, sunucuyla bağlantı kurulması ve bağlantının güvenlik için şifrelenmesi dahildir.

Her şey yapıldıktan sonra, tarayıcı bilgileri indirme ve ayrıştırma, Belge Nesne Modeli (DOM) ve CSS Nesne Modeli (CSSOM) oluşturma ve ardından içeriği işleme ile devam edebilir.

Son kısım ise sayfayı interaktif hale getirmektir. Yukarıda bahsedilen işlemlerin tümü ana iş parçacığında gerçekleşir. Bu nedenle, tarayıcının ana iş parçacığı sayfayı ayrıştırma, oluşturma ve boyama ile tamamlandıktan sonra, sayfayı kaydırma, dokunma ve diğer etkileşimler için kullanılabilir hale getirmek için ertelenmiş JavaScript dosyalarına bakmanın zamanı geldi.

Özetle, her sayfa yüklendiğinde perde arkası işlem budur.

Kaynak ipuçlarını entegre ederek bu aşamaların her birini nasıl olumlu yönde etkileyebileceğinizi görelim.


Kaynak İpuçları: Önceden Getirme, Ön Bağlantı, Ön Yükleme

Adından da anlaşılacağı gibi, kaynak ipuçları, tarayıcıya belirli kaynakları veya web sayfalarını nasıl kullanması gerektiğini söyleyen ipuçları veya talimatlardır. Başka bir deyişle, bu talimat seti, alınması ve işlenmesi gereken kökenlere veya kaynaklara öncelik vermede tarayıcıya yardımcı olmanıza olanak tanır.

Tüm kaynak ipuçları, HTML belgelerinizin başında bulacağınız bağlantı öğesinin rel niteliğini kullanır.

Bu HTML kod parçacıklarını web sitenize entegre etmek, tarayıcının seçilen dosyaları, tarayıcının normal sayfa yükleme sürecinde bulmasına kıyasla daha erken yüklemeye başlamasına olanak tanır.

Artık temel bilgiler geride kaldığına göre, burada bulunduğunuz kısma geçelim - kaynak ipuçlarına, faydalarına ve ne zaman kullanılacağına genel bakış.

önceden getir

link rel=prefetch , tarayıcının daha sonra gerekebilecek kaynakları almasına ve bunları tarayıcının önbelleğinde saklamasına olanak tanıyan düşük öncelikli bir kaynak ipucudur.

Ön getirme işlemi

Önceden getirme çok düşük bir öncelik ayarladığından , yüksek öneme sahip dosyalar için bu ipucunu kullanmayın .

Harika kullanım örneklerinden biri, sonraki sayfaların yükleme süresini iyileştirmek için önceden getirmeyi kullanmaktır. Örneğin, bir kullanıcının kimlik doğrulaması sırasında prefetch yönergesini uygulayabilirsiniz. Bu şekilde, bir sonraki görecekleri sayfa için gereken kaynakları önceden yüklemek için kimlik bilgilerini girmeleri için geçen süreden yararlanabilirsiniz.

Ziyaretçilerinizin sitenizdeki adımlarını tahmin ederek ve kaynakları önceden getirerek, İlk İçerikli Boyama ve Etkileşim Süresi gibi metrikleri iyileştirebilirsiniz. Netflix'in yaptığı ve Etkileşim Süresini %30 azaltan bir şey.

Bu noktaya kadar bahsettiğimiz her şey, bağlantı önceden getirme olarak da bilinen önceden getirme ile ilgilidir. Ancak eşit derecede önemli olan iki ön yükleme türü daha vardır ve şunu belirtmemiz gerekir:

1. DNS Önceden Getirme
Tarayıcının, ana bilgisayara (başlangıç ​​sunucusu) bağlanmadan önce bir ana bilgisayar adını (URL) bir IP adresine dönüştürmek için bir DNS araması yapması gerekir.

Bu genellikle yalnızca milisaniye sürse de, bir web sitesi çoğu web sitesinin yaptığı gibi üçüncü taraf bir alan adından dosya yüklerse, tarayıcının her alan için bir DNS araması yapması gerekir. Bazı siteler (örneğin haber siteleri) çok fazla dış kaynak kullanır, bu da sayfa başına düzinelerce DNS araması gerekebileceği anlamına gelir.

Bu durumlarda, dns-prefetch ipucunu kullanmak, talimat tarayıcıya bu işlemi hemen başlatmasını söylediği için, yükleme işleminde daha sonra ihtiyaç keşfedildiği için değil, birkaç milisaniye kazandırabilir.

dns-önceden getirme


Web Almanac 2021'de önerildiği gibi, optimal sonuçlar için dns-prefetch ile preconnect ipucunu birleştirmek iyi bir uygulamadır. Nedenini preconnect hakkında konuştuğumuz bölümde görebilirsiniz.

2. Ön işleme
Önceden oluşturma, kullanıcının bir sonraki adımda gezinebileceği kaynakları optimize etmesi bakımından önceden getirmeye çok benzer. Aradaki fark, önceden oluşturmanın aslında belirli kaynaklar yerine tüm sayfayı oluşturmasıdır.

ön işleme


ön bağlantı

dns-prefetch gibi, preconnect yönergesi, sunucuya bir ilk istek göndermeden önce tarayıcının erken bağlantılar kurmasına yardımcı olur.

Ancak, ön bağlantı ipucu bir adım daha ileri götürür. DNS aramalarını gerçekleştirirken, TLS görüşmelerini ve TCP el sıkışmalarını da içerir. Bu da gidiş-dönüş gecikmesini ortadan kaldırır ve daha da fazla zaman kazandırır.

Ön Bağlantılı ve Bağlantısız

Ama işte soru geliyor:

Preconnect , dns-prefetch'in yaptığı her şeyi yapıyorsa ve daha fazlasını yapıyorsa, neden ilk etapta dns-prefetch kullanayım ?

Çoğu durumda, ön bağlantı, dns-prefetch için tercih edilen seçenektir, ancak sorun, ön bağlantının bazı tarayıcılar tarafından desteklenmemesidir:

Ön bağlantı tarayıcı desteği
Kaynak: caniuse.com

İşin iyi yanı, bunlardan en iyi şekilde yararlanmak için bunları birlikte kullanabilmenizdir. dns-prefetch'e geri dönüşle onu destekleyen tarayıcılarda ön bağlantıdan yararlanabilirsiniz:

Ön bağlantı ve dns-önceden getirme

Google'a göre:

“Önemli üçüncü taraf kaynaklara erken bağlantılar kurarak yükleme süresini 100-500 ms arasında hızlandırabilirsiniz. Bu rakamlar küçük görünebilir, ancak kullanıcıların web sayfası performansını nasıl algıladıkları konusunda bir fark yaratıyorlar.”

2019'da Chrome, önemli kaynaklara önceden bağlanarak Etkileşim Süresini neredeyse 1 saniye iyileştirmeyi başardı.


ön yükleme

Preload direktifinin nasıl çalıştığını açıklamadan önce bir şeyi netleştirmemiz gerekiyor.

Ön yüklemeden düzenli olarak "Kaynak İpucu" olarak bahsedilse de, öyle değildir. Ön yükleme, bildirimsel bir getirmedir ve tarayıcılar için zorunludur , bu da onu bir ipucu yerine bir komut haline getirir.

Bununla birlikte, ön yükleme , tarayıcıyı bir kaynağı tarayıcının keşfedeceğinden daha erken indirmeye zorlamak için kullanılır, çünkü bu sayfa için çok önemlidir.

Ön yükleme yönergesi en iyi, kritik oluşturma yolunun parçası olan ancak tarayıcı tarafından kolayca keşfedilemeyen kaynaklarda çalışır. Örneğin, yazı tipleri, CSS veya kritik JavaScript.

dns-prefetch ve preconnect ipuçlarından bir diğer fark, yalnızca rel ve href özniteliklerine ihtiyaç duymalarına rağmen, önyüklemenin daha karmaşık olmasıdır. Önceden yüklemek istediğiniz kaynağın içerik türünü belirten as özniteliğini eklemeniz gerekir.

ön yükleme

Google'da bir mühendislik müdürü olan Addy Osmani'ye göre, önyükleme zorunlu olduğunda bir as özelliği sağlıyor:

"Örneğin, komut dosyaları gibi neyin önceden yükleneceğini belirtirken geçerli bir "as" sağlamazsanız, sonunda iki kez getirilirsiniz."


Aşağıda, belirtebileceğiniz değerler olarak tam bir liste verilmiştir:

değerler olarak
As özniteliğinin dahil edilmesi, tarayıcının türüne göre önceden getirilen kaynağın önceliğini belirlemesine ve kaynağın önbellekte zaten var olup olmadığını belirlemesine yardımcı olur.

Farklı kaynak türlerinin nasıl önceliklendirildiği hakkında daha fazla bilgi edinmek için Chrome Kaynak Öncelikleri ve Planlama belgesine göz atın.

Yazı tipleri gibi bazı kaynaklar için crossorigin niteliğini de eklemeniz gerekir.

çapraz köken özelliği

crossorigin özelliği, isteğin modunu bir HTTP CORS İsteği olarak ayarlar. CORS (Çapraz Kaynak Kaynak Paylaşımı), bir sunucunun, bir tarayıcının kaynak yüklemeye izin vermesi gereken, kendisinden başka herhangi bir kaynağı belirtmesine izin veren bir mekanizmadır. Bu makalenin odak noktası olmadığı için bu konuya derinlemesine girmeyeceğiz, ancak burada daha fazla bilgi bulabilirsiniz.

As özniteliğine benzer şekilde, fontları crossorigin olmadan önceden yüklemek iki kez getirecektir. Addy Osmani'nin konuyla ilgili makalesinden başka bir alıntı:

“Ön yüklemeyi kullanarak yazı tiplerini getirirken bir crossorigin özniteliği eklediğinizden emin olun, aksi takdirde bunlar iki kez indirilir. Anonim mod CORS kullanılarak istenirler. Bu tavsiye, yazı tipleri sayfayla aynı kaynakta olsa bile geçerlidir. Bu, diğer anonim alımlar için de geçerlidir (örneğin, varsayılan olarak XHR).


Daha Fazla Kaynak İpuçları, Daha Fazla Sorun

Şimdiye kadarki her şeyi okuyarak, mümkün olduğunca çok kaynak ipucu kullanmanın yalnızca tarayıcıların sayfalarınızı yıldırım hızında yüklemesine yol açacağını düşünmeye başlayabilirsiniz.

Ne yazık ki, durum böyle değil.

Kaynak ipuçlarını entegre ederken göz önünde bulundurmanız gereken bazı aksaklıklar şunlardır:

1. Önceden getirme, veri tüketimini artırabilir

Önceden getirme düşük bir indirme önceliği belirlemesine rağmen, bu zararsız olduğu anlamına gelmez. Kullanımı sitenizdeki veri tüketimini artırabilir, bu da hem sizin (sunucunuzda artan trafik) hem de kullanıcılarınız (gereksiz aşırı kaynak tüketimi) için sorunlar oluşturabilir. Ek olarak, sonunda kullanılmayabilecek fazladan bayt yükleyebilirsiniz. Bu yüzden entegre etmeden önce iki kez düşünün.

2. Prerender, bant genişliği israfına neden olabilir

Tüm sayfaları önceden indirdiğiniz için önceden oluşturma ile kumar önceden getirmeden bile daha büyüktür. Bu, ipucunu kaynak açısından ağır hale getirir ve özellikle mobil cihazlarda bant genişliği israfına neden olabilir. Ve en kötü yanı, kullanıcılar sayfayı talep etmezlerse ipucunun etkisini bile göremeyebilirler.

3. Ön bağlantı, ekstra CPU kullanımına neden olabilir

Ön bağlantı , düşük öncelikli bir ipucu olsa da, web sitenizin performansına zarar verebilir. Kurulan bir bağlantı hızlı bir şekilde kullanılmazsa (Chrome'da 10 saniye içinde), ön bağlantı yönergesi yalnızca ekstra CPU kullanımı ekler ve tarayıcı tarafından otomatik olarak kapatılır. Ek olarak, diğer önemli kaynaklar için bant genişliği ile rekabet edecek olan şifreleme sertifikalarının boyutu yaklaşık 3 KB olduğundan ön bağlantıyı dikkatli kullanmalısınız.


4. Ön yükleme, tarayıcının çözümleyicisi tarafından belirlenen öncelikleri geçersiz kılar

ön yükleme , tarayıcının bir kaynağı hemen indirmesine izin verdiği için güçlü bir talimattır. Bununla birlikte, modern web tarayıcıları kaynaklara öncelik vermede oldukça iyidir, bu nedenle aşırı önyükleme kullanımı olumsuz sonuçlara yol açabilir. Örneğin, eşzamansız bir kaynak URL'si ile eşleşen bir ön yükleme yönergesi eklerseniz, tarayıcı onu daha hızlı getirir, bu nedenle daha hızlı ayrıştırır ve ana iş parçacığını sayfa yüklemesinin çok başında keserek eşzamansız özelliğinizin etkisini geçersiz kılar.

Özet

Bu makalede çok şey anlattık, o yüzden en önemli noktaların kısa bir özetini yapalım:

  • dns-prefetch ve preconnect , alan adlarına öncelik vermek için kullanılır (ör. https://example.com).
  • önceden getirme ve ön yükleme, kaynakların yüklenmesine öncelik vermek için kullanılır. Önceden getirme , sonraki sayfaların yükleme süresini iyileştirmek için kullanılsa da, önceden yükleme, geçerli sayfa için kritik kaynaklarda en iyi sonucu verir.
  • prerender bir sayfanın tamamına başvurur (ör. blog.html).
  • prefetch , prerender ve preconnect kaynak ipuçlarıdır ve tarayıcının uygun gördüğü şekilde yürütülürler. Preload yönergesi, tarayıcılar için zorunlu olan bir komuttur.
  • preload kullanırken, çift getirmeyi önlemek için as ve crossorigin özniteliklerini sağlamayı unutmayın.
  • Kaynak ipuçları düşük öncelikli talimatlar olsa da, sitenizin performansı için hala bir tehdit oluşturuyor. Bunları ölçülü olarak ve yalnızca gerektiğinde kullanın.
  • preload , tarayıcının analizörünün önceliklerini geçersiz kılabilen güçlü bir yönergedir. Modern tarayıcıların kaynaklara öncelik vermede oldukça iyi olduğunu unutmayın, bu nedenle önyükleme “ipucunu” idareli kullanın.

İçerik ve varlıkların teslimini hızlandırmak ve sitenizin genel performansını iyileştirmek için kaynak ipuçları hakkında yeni edindiğiniz bilgileri kullanın. Ve her değişiklik yaptığınızda web sitenizi gerçek dünyada (saha verilerine odaklanın) test etmeyi unutmayın.