NoState Önceden Getirme ile tanışın

Katie Hempenius
Katie Hempenius

Giriş

NoState ön getirme, Chrome'daki yeni bir mekanizmadır. <link rel="prerender"> gibi özellikleri desteklemek için kullanılan desteği sonlandırılan ön oluşturma işlemine alternatiftir. Önceden oluşturma gibi, kaynakları önceden getirir ancak önceden oluşturmanın aksine JavaScript'i yürütmez veya sayfanın herhangi bir bölümünü önceden oluşturmaz. NoState ön getirmenin amacı, sayfa yükleme sürelerini azaltırken ön oluşturmaya kıyasla daha az bellek kullanmaktır.

NoState ön getirme, bir API değil, Chrome'un çeşitli API'leri ve özellikleri uygulamak için kullandığı bir mekanizmadır. Hem Resource Hints API hem de Chrome adres çubuğu tarafından sayfaların önceden yüklenmesi, NoState Prefetch kullanılarak uygulanır. Chrome 63 veya sonraki bir sürümü kullanıyorsanız tarayıcınız <link rel="prerender"> gibi özellikler için zaten NoState ön getirme özelliğini kullanıyordur.

Bu makalede, NoStatePrefetch'in işleyiş şekli, kullanıma sunulma nedenleri ve Chrome'un kullanım istatistiklerini görüntülemek için histogramlerini kullanma talimatları açıklanmaktadır.

Motivasyon

NoState ön getirme özelliğinin kullanıma sunulmasının iki temel nedeni vardır:

Bellek kullanımını azaltma

NoState ön getirme özelliği yalnızca yaklaşık 45 MiB bellek kullanır. Ön yükleme tarayıcısını sürdürmek, NoState ön getirme için birincil bellek maliyetidir ve bu maliyet farklı kullanım alanlarında nispeten sabit kalır. Getirmelerin boyutunu veya hacmini artırmak, NoState ön getirme özelliği tarafından tüketilen bellek miktarını önemli ölçüde etkilemez.

Buna karşılık ön oluşturma genellikle 100 MiB bellek tüketir ve bellek tüketimi 150 MiB ile sınırlıdır. Bu yüksek bellek tüketimi, bu sürümü düşük kaliteli (ör. 512 MB'den az RAM) cihazlar için uygunsuz hale getirir. Sonuç olarak Chrome, düşük kaliteli cihazlarda ön oluşturma yapmaz ve bunun yerine ön bağlantı kurar.

Yeni web platformu özelliklerinin desteğini kolaylaştırma

Ön oluşturma sırasında kullanıcıya yönelik (ör. müzik veya video oynatma) veya durum bilgisi içeren işlemler (ör. oturum veya yerel depolama alanında değişiklik yapma) yapılmamalıdır. Ancak sayfa oluşturulurken bu işlemlerin yapılmasını önlemek zor ve karmaşık olabilir. NoState ön getirme yalnızca kaynakları önceden getirir: Kodu yürütmez veya sayfayı oluşturmaz. Bu sayede, kullanıcılara yönelik ve durum bilgisi içeren işlemlerin yapılmasını önlemek daha kolay olur.

Uygulama

Aşağıdaki adımlarda, NoState ön getirme özelliğinin işleyiş şekli açıklanmaktadır.

  1. NoStatePrefetch tetiklendi.

    Önceden oluşturma kaynak ipucu (ör. <link rel="prerender">) ve bazı Chrome özellikleri, aşağıdaki iki koşulun karşılanması durumunda NoState ön getirmeyi tetikler: a) kullanıcı düşük kaliteli bir cihazda değilse ve b) kullanıcı hücresel ağda değilse.

  2. NoState ön getirme işlemi için yeni ve özel bir oluşturma aracı oluşturulur.

    Chrome'da "oluşturucu", bir HTML dokümanı alıp ayrıştırmaktan, oluşturma ağacını oluşturmaktan ve sonucu ekrana yansıtmaktan sorumlu bir işlemdir. Chrome'daki her sekmenin ve her NoState ön getirme işleminin, yalıtım sağlamak için kendi oluşturma aracı vardır. Bu, yanlış giden bir şeyin (ör. sekmenin kilitlenmesi) etkilerini en aza indirmenin yanı sıra kötü amaçlı kodun diğer sekmelere veya sistemin diğer bölümlerine erişmesini engellemeye yardımcı olur.

  3. NoState ön getirme özelliğiyle yüklenen kaynak getirilir. Ardından HTMLPreloadScanner, getirilmesi gereken tüm alt kaynakları bulmak için bu kaynağı tarar. Ana kaynakta veya alt kaynaklarından herhangi birinde kayıtlı bir servis çalışanı varsa bu istekler ilgili servis çalışanından geçer.

    NoState ön getirme yalnızca GET HTTP yöntemini destekler; diğer HTTP yöntemlerinin kullanılmasını gerektiren alt kaynakları getirmez. Ayrıca, kullanıcı işlemi gerektiren kaynakları (ör. kimlik doğrulama pop-up'ları, SSL istemci sertifikası veya manuel geçersiz kılma işlemleri) getirmez.

  4. Getirilen alt öğeler "IDLE" net önceliğiyle getirilir.

    "IDLE" Net Önceliği, Chrome'da mümkün olan en düşük Net Önceliktir.

  5. NoState Önceden Getirme tarafından alınan tüm kaynaklar, önbellek başlıklarına göre önbelleğe alınır.

    NoState Önceden Getirme, no-store Cache-Control başlığı olan kaynaklar hariç tüm kaynakları önbelleğe alır. Vary yanıt başlığı veya no-cache Cache-Control başlığı varsa ya da kaynak 5 dakikadan daha eskiyse kaynak kullanılmadan önce yeniden doğrulanır.

  6. Tüm alt kaynaklar yüklendikten sonra oluşturma aracı sonlandırılır.

    Alt kaynakların zaman aşımı süresi dolarsa oluşturucu 30 saniye sonra sonlandırılır.

  7. Tarayıcı, çerez deposunu ve yerel DNS önbelleğini güncellemenin dışında herhangi bir durum değişikliği yapmaz. Bu, "NoState Öne Getirme"deki "NoState" olduğu için bu noktayı belirtmek önemlidir.

    "Normal" sayfa yükleme sürecinin bu noktasında tarayıcı, büyük olasılıkla tarayıcı durumunu değiştirecek işlemler yapar: Örneğin, JavaScript'i yürütme, sessionStorage veya localStorage öğesini değiştirme, müzik veya video oynatma, Geçmiş API'sini kullanma ya da kullanıcıya istem gösterme. NoState ön getirme işleminde gerçekleşen tek durum değişiklikleri, yanıtlar geldiğinde DNS önbelleği ve yanıtta Set-Cookie üst bilgisi varsa çerez deposunun güncellenmesidir.

  8. Kaynak gerektiğinde tarayıcı penceresine yüklenir.

    Ancak önceden oluşturulmuş bir sayfanın aksine, sayfa hemen görünmez. Tarayıcı tarafından oluşturulması gerekir. Tarayıcı, NoState ön getirme için kullandığı oluşturma aracını yeniden kullanmaz ve bunun yerine yeni bir oluşturma aracı kullanır. Sayfayı önceden oluşturmamak, NoStatePrefetch'in bellek tüketimini azaltır ancak sayfa yükleme süreleri üzerindeki olası etkisini de azaltır.

    Sayfada bir hizmet çalışanı varsa bu sayfa yükleme işlemi tekrar hizmet çalışanından geçer.

    NoState ön getirme özelliği, sayfaya ihtiyaç duyulduğunda alt kaynakları getirmeyi bitirmediyse tarayıcı, NoState ön getirme özelliğinin bıraktığı yerden sayfa yükleme işlemine devam eder. Tarayıcının yine kaynak getirmesi gerekir ancak NoState ön getirme özelliği başlatılmamış olsaydı gerekenden daha az kaynak getirmesi gerekir.

Web Analytics'e etkisi

NoState ön getirme özelliği kullanılarak yüklenen sayfalar, web analizi araçları tarafından aracın istemci tarafında mı yoksa sunucu tarafında mı veri toplamasına bağlı olarak biraz farklı zamanlarda kaydedilir.

İstemci tarafı analiz komut dosyaları, sayfa kullanıcıya gösterildiğinde bir sayfa görüntülemeyi kaydeder. Bu komut dosyaları JavaScript'in yürütülmesine bağlıdır ve NoState ön getirme işlemi hiçbir JavaScript yürütmez.

Sunucu tarafı analiz araçları, bir istek işlendiğinde metrikleri kaydeder. NoState ön getirme aracılığıyla yüklenen kaynaklarda, bir istek işlendikten sonra yanıtın istemci tarafından gerçekten kullanılması (kullanılıyorsa) arasında önemli bir zaman aralığı olabilir. Chrome 69'dan beri NoState Prefetch, normal tarama işlemlerinden ayırt edilebilmeleri için tüm isteklere Purpose: Prefetch üstbilgisini ekler.

Göz atın

NoStatePrefetch, Aralık 2017'de Chrome 63 ile birlikte kullanıma sunulmuştur. Şu anda aşağıdakiler için kullanılır:

  • prerender kaynak ipucunu uygulama
  • Google Arama sonuçlarındaki ilk sonucu getirme
  • Chrome adres çubuğunun, bir sonraki ziyaretin gerçekleşme olasılığı yüksek olan sayfaları getirmesi

NoStatePrefetch özelliğini nasıl kullandığınızı görmek için Chrome Dahili'ni kullanabilirsiniz.

NoState ön getirme özelliğiyle yüklenen sitelerin listesini görüntülemek için chrome://net-internals/#prerender adresine gidin.

NoState ön getirme kullanımıyla ilgili istatistikleri görüntülemek için chrome://histograms adresine gidin ve "NoStatePrefetch"i arayın. NoState ön getirmenin her kullanım alanı için bir tane olmak üzere üç farklı NoState ön getirme histogrami vardır:

  • "NoStatePrefetch" (kaynak ipuçlarını önceden oluşturma işlemine göre kullanım istatistikleri)
  • "gws_NoStatePrefetch" (Google arama sonuçları sayfasının kullanımıyla ilgili istatistikler)
  • "omnibox_NoStatePrefetch" (Chrome adres çubuğu tarafından kullanım istatistikleri)