NoState Önceden Getirme ile tanışın

Katie Hempenius
Katie Hempenius

Giriş

NoState Önceden Getirme, Chrome'da <link rel="prerender"> gibi özellikleri desteklemek için kullanılan kullanımdan kaldırılan önceden işleme sürecine alternatif olan yeni bir mekanizmadır. Önceden oluşturmada olduğu gibi, kaynakları önceden getirir ancak önceden işlemenin aksine JavaScript'i yürütmez veya sayfanın herhangi bir bölümünü önceden oluşturmaz. NoState Önceden Getirme işleminin amacı, sayfa yüklenme sürelerini kısaltmaya devam ederken önceden işlemeye göre daha az bellek kullanmaktır.

NoState Önceden Getirme bir API değildir. Chrome tarafından çeşitli API'ları ve özellikleri uygulamak için kullanılan bir mekanizmadır. Hem Resource İpuçları API hem de sayfaların Chrome adres çubuğundan önceden yüklenmesi, NoState Önceden Getirme kullanılarak uygulanır. Chrome 63 veya sonraki bir sürümünü kullanıyorsanız tarayıcınız <link rel="prerender"> gibi özellikler için zaten NoState Önceden Getirme özelliğini kullanıyor demektir.

Bu makalede, NoStatePrefetch'ın işleyiş şekli, bu özelliği kullanıma sunma nedenleri ve kullanımıyla ilgili istatistikleri görüntülemek için Chrome'un histogramlarını kullanma talimatları açıklanmaktadır.

Motivasyon

NoState Önceden Getirme'nin kullanıma sunulmasının iki ana sebebi vardı:

Bellek kullanımını azaltma

NoState Önceden Getirme, yalnızca yaklaşık 45 MiB bellek kullanır. Ön yükleme tarayıcısının bakımı, NoState Önceden Getirme'nin birincil bellek gideridir ve bu maliyet farklı kullanım durumlarında nispeten sabit kalır. Getirme işlemlerinin boyutunu veya hacmini artırmanın, NoState Önceden Getirme tarafından tüketilen bellek miktarı üzerinde önemli bir etkisi yoktur.

Buna karşılık, önceden 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, düşük donanımlı (ör. <= 512 MB RAM) cihazlar için uygun olmamasına neden olur. Sonuç olarak Chrome, düşük teknolojili cihazlarda önceden oluşturma yapmaz ve bunun yerine önceden bağlanır.

Yeni web platformu özellikleri için destek sağlama

Önceden işleme ile kullanıcılara yönelik (ör. müzik veya video oynatma) ya da durum bilgili işlemler (ör. oturumu değiştirme veya yerel depolama) gerçekleşmemelidir. Ancak, bir sayfayı oluştururken bu işlemlerin gerçekleşmesini engellemek zor ve karmaşık olabilir. NoState Önceden Getirme, kaynakları yalnızca önceden getirir, kodu yürütmez veya sayfayı oluşturmaz. Bu, kullanıcılara yönelik ve durum bilgili işlemlerin gerçekleşmesini önlemeyi kolaylaştırır.

Uygulama

Aşağıdaki adımlarda, NoState Önceden Getirme'nin işleyiş şekli açıklanmaktadır.

  1. NoStatePrefetch tetiklenir.

    Önceden oluşturma kaynak ipucu (ör. <link rel="prerender">) ve bazı Chrome özellikleri, şu iki koşulun karşılanması koşuluyla NoState Önceden Getirme'yi tetikler: a) kullanıcı düşük özellikli bir cihazda değilse ve b) kullanıcı bir hücresel ağa bağlı değilse.

  2. NoState Önceden Getirme işlemi için yeni ve özel bir oluşturucu oluşturuldu.

    Chrome'da "oluşturucu", bir HTML belgesini almaktan, ayrıştırmaktan, oluşturma ağacını oluşturmaktan ve sonucu ekrana boyamaktan sorumlu bir süreçtir. Chrome'daki her sekme ve her NoState Önceden Getirme işleminin yalıtım sağlamak için kendi oluşturucusu vardır. Bu, kötü giden bir şeylerin (ör. sekme kilitlenmesi) etkilerini en aza indirmeye ve kötü amaçlı kodların diğer sekmelere veya sistemin diğer bölümlerine erişmesini önlemeye yardımcı olur.

  3. NoState Önceden Getirme ile yüklenen kaynak getirilir. HTMLPreloadScanner, getirilmesi gereken alt kaynakları bulmak için bu kaynağı tarar. Ana kaynakta veya alt kaynaklarından herhangi birinde kayıtlı bir hizmet çalışanı varsa bu istekler uygun hizmet çalışanı üzerinden iletilir.

    NoState Önceden 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şlemleri gerektiren kaynakları da (ör. kimlik doğrulama pop-up'ları, SSL istemci sertifikası veya manuel geçersiz kılmalar) getirmez.

  4. Getirilen alt kaynaklar "IDLE" Net Önceliği ile getirilir.

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

  5. NoState Ön Getirme tarafından alınan tüm kaynaklar, önbellek üstbilgilerine göre önbelleğe alınır.

    NoState Önceden Getirme, no-store Önbellek Kontrolü başlığına sahip olanlar dışındaki tüm kaynakları önbelleğe alır. Vary yanıt üst bilgisi veya no-cache Cache-Control üst bilgisi olan ya da 5 dakikadan daha eski olan kaynaklar, kullanılmadan önce yeniden doğrulanır.

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

    Alt kaynaklar zaman aşımına uğrarsa oluşturucu 30 saniye sonra sonlandırılır.

  7. Tarayıcı, çerez deposunu ve yerel DNS önbelleğini güncellemek dışında herhangi bir durum değişikliği yapmaz. Bu, “NoState Ön Getirmesi”ndeki “NoState” olduğu için bunu belirtmek önemlidir.

    "Normal" sayfa yükleme işleminin bu noktasında, tarayıcı muhtemelen tarayıcı durumunu değiştirecek şeyler yapar: Örneğin, JavaScript'i çalıştırmak, sessionStorage veya localStorage biçimini değiştirmek, müzik veya video oynatmak, History API'yi kullanmak ya da kullanıcıyı bilgilendirmek. NoState Önceden Getirme işleminde gerçekleşen tek durum değişiklikleri, yanıtlar geldiğinde DNS önbelleğinin güncellenmesi ve bir yanıt Set-Cookie üst bilgisini içeriyorsa çerez deposunun güncellenmesidir.

  8. Kaynak, gerekli olduğunda tarayıcı penceresine yüklenir.

    Bununla birlikte, önceden işlenmiş bir sayfanın aksine, sayfa hemen görünmez. Yine de tarayıcı tarafından oluşturulması gerekir. Tarayıcı, NoState Önceden Getirmesi için kullandığı oluşturucuyu yeniden kullanmaz ve bunun yerine yeni bir oluşturucu kullanır. Sayfanın önceden oluşturulmaması, NoStatePrefetch'ın bellek tüketimini ve sayfa yükleme süreleri üzerinde oluşturabileceği olası etkiyi de azaltır.

    Sayfada Service Worker varsa bu sayfa yükleme işlemi Service Worker üzerinden tekrar gerçekleşir.

    NoState Ön Getirmesi, sayfa gerekene kadar alt kaynakları getirmeyi bitirmemişse tarayıcı, NoState Önceden Getirme'nin kaldığı yerden sayfa yükleme işlemine devam eder. Tarayıcının yine de kaynakları getirmesi gerekir ancak NoState Ön Getirmesi başlatılmamışsa gereken kadar kaynak getirmesi gerekmez.

Web Analizi Üzerindeki Etki

NoState Önceden Getirme kullanılarak yüklenen sayfalar, aracın istemci tarafında mı yoksa sunucu tarafında mı veri topladığına bağlı olarak web analizi araçları tarafından biraz daha farklı zamanlarda kaydedilir.

İstemci tarafı analiz komut dosyaları, sayfa kullanıcıya gösterildiğinde bir sayfa görüntüleme kaydeder. Bu komut dosyaları JavaScript'in yürütülmesine dayanır ve NoState Ön Getirmesi herhangi bir JavaScript'i yürütmez.

Sunucu tarafı analiz araçları, bir istek işlendiğinde metrikleri kaydeder. NoState Önceden Getirme ile yüklenen kaynaklarda, bir isteğin işlendiği zaman ile yanıtın istemci tarafından gerçekten kullanıldığı (varsa) arasında önemli bir zaman olabilir. NoState Önceden Getirme, Chrome 69'dan itibaren normal taramadan ayırt edilebilmelerini sağlamak için tüm isteklere Purpose: Prefetch başlığını ekler.

NoStatePrefetch, Aralık 2017'de Chrome 63'te kullanıma sunulmuştur. Şu anda kullanıldığı yer:

  • prerender kaynak ipucunu uygulayın
  • Google Arama sonuçlarındaki ilk sonucu getir
  • Chrome adres çubuğunda ziyaret edilme olasılığının yüksek olduğunu tahmin ettiği sayfaları getirir

NoStatePrefetch'ı nasıl kullandığınızı görmek için Chrome Internals'ı kullanabilirsiniz.

NoState Önceden Getirme ile yüklenen sitelerin listesini görüntülemek için chrome://net-internals/#prerender adresine gidin.

NoState Önceden Getirme kullanımınızla ilgili istatistikleri görüntülemek için chrome://histograms adresine gidin ve "NoStatePrefetch" araması yapın. NoState Önceden Getirme'nin her bir kullanım durumu için bir adet olmak üzere üç farklı NoState Önceden Getirme histogramı vardır:

  • “NoStatePrefetch” (önceden oluşturma kaynak ipuçlarıyla kullanım istatistikleri)
  • “gws_NoStatePrefetch” (Google arama sonuçları sayfası tarafından kullanım istatistikleri)
  • "omnibox_NoStatePrefetch" (Chrome adres çubuğu tarafından kullanım istatistikleri)