Yayınlanma tarihi: 20 Temmuz 2018
Giriş
NoState Prefetch, Chrome'da <link rel="prerender"> gibi özellikleri desteklemek için kullanılan kullanımdan kaldırılan önceden oluşturma işlemine alternatif olan yeni bir mekanizmadır. Önceden oluşturma gibi, kaynakları önceden getirir ancak önceden oluşturmadan farklı olarak JavaScript'i yürütmez veya sayfanın herhangi bir bölümünü önceden oluşturmaz. NoState
Prefetch'in amacı, sayfa yükleme sürelerini azaltmaya devam ederken önceden oluşturmaya kıyasla daha az bellek kullanmaktır.
NoState Prefetch bir API değil, Chrome'un çeşitli API'leri ve özellikleri uygulamak için kullandığı bir mekanizmadır. Kaynak İpuçları API'si ve Chrome adres çubuğu tarafından sayfaların önceden getirilmesi, NoState Prefetch 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 NoState Prefetch'i zaten kullanıyordur.
Bu makalede, NoStatePrefetch'in işleyiş şekli, kullanıma sunulma nedenleri ve kullanım istatistiklerini görüntülemek için Chrome'un histogramlarının nasıl kullanılacağı açıklanmaktadır.
Motivasyon
NoState Prefetch'i kullanıma sunmanın iki temel nedeni vardı:
Bellek kullanımını azaltma
NoState Prefetch yalnızca yaklaşık 45 MiB bellek kullanır. Önceden yükleme tarayıcısının bakımı, NoState Prefetch için temel bellek gideridir ve bu maliyet, farklı kullanım alanlarında nispeten sabit kalır. Getirme işlemlerinin boyutunu veya hacmini artırmak, NoState Prefetch tarafından kullanılan bellek miktarı üzerinde önemli bir etkiye sahip değildir.
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 teknolojili (ör. <= 512 MB RAM) cihazlar için uygun değildir. Bu nedenle Chrome, düşük seviye cihazlarda önceden oluşturma yapmaz ve bunun yerine ön bağlantı oluşturur.
Yeni web platformu özelliklerinin desteklenmesini kolaylaştırma
Önceden oluşturma sırasında kullanıcıya yönelik (ör. müzik veya video oynatma) ya da durum bilgisi içeren işlemler (ör. oturum veya yerel depolamayı değiştirme) gerçekleşmemelidir. Ancak bu işlemlerin bir sayfa oluşturulurken gerçekleşmesini önlemek zor ve karmaşık olabilir. NoState Prefetch yalnızca kaynakları önceden getirir: kodu yürütmez veya sayfayı oluşturmaz. Bu sayede, kullanıcıya yönelik ve durum bilgisi içeren işlemlerin gerçekleşmesini önlemek kolaylaşır.
Uygulama
Aşağıdaki adımlarda NoState Prefetch'in işleyiş şekli açıklanmaktadır.
- NoStatePrefetch tetiklenir. - Önceden oluşturma kaynak ipucu (ör. - <link rel="prerender">) ve bazı Chrome özellikleri, aşağıdaki iki koşul karşılandığı sürece NoState Prefetch'i tetikler: a) Kullanıcı, düşük özellikli bir cihazda değildir ve b) kullanıcı, hücresel ağda değildir.
- NoState Prefetch için yeni ve özel bir oluşturucu oluşturulur. - Chrome'da "oluşturucu", bir HTML dokümanını almaktan, ayrıştırmaktan, oluşturma ağacını oluşturmaktan ve sonucu ekrana çizmekten sorumlu bir işlemdir. Chrome'daki her sekmenin ve her NoState Prefetch işleminin, yalıtım sağlamak için kendi oluşturucusu vardır. Bu, bir şeylerin ters gitmesinin (ö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 önlemeye yardımcı olur. 
- NoState Prefetch ile yüklenen kaynak getirilir. HTMLPreloadScanner, daha sonra getirilmesi gereken alt kaynakları bulmak için bu kaynağı tarar. Ana kaynak veya alt kaynaklarından herhangi birinde kayıtlı bir hizmet çalışanı varsa bu istekler uygun hizmet çalışanından geçer. - NoState Prefetch 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 (ör. kimlik doğrulama pop-up'ları, SSL istemci sertifikası veya manuel geçersiz kılmalar) gerektiren kaynakları getirmez. 
- Getirilen alt kaynaklar "IDLE" (Boşta) ağ önceliğiyle getirilir. - "IDLE" ağ önceliği, Chrome'daki olası en düşük ağ önceliğidir. 
- NoState Prefetch tarafından alınan tüm kaynaklar, önbellek başlıklarına göre önbelleğe alınır. - NoState Prefetch, - no-storeCache-Control başlığına sahip olanlar hariç tüm kaynakları önbelleğe alır.- Varyyanıt başlığı,- no-cacheCache-Control başlığı varsa veya kaynak 5 dakikadan daha eskiyse kaynak kullanılmadan önce yeniden doğrulanır.
- Tüm alt kaynaklar yüklendikten sonra oluşturucu sonlandırılır. - Alt kaynakların zaman aşımına uğraması durumunda oluşturucu 30 saniye sonra sonlandırılır. 
- Tarayıcı, çerez deposunu ve yerel DNS önbelleğini güncellemenin dışında herhangi bir durum değişikliği yapmaz. Bu, "NoState Prefetch"teki "NoState" olduğu için bu durumu belirtmek önemlidir. - "Normal" sayfa yükleme sürecinin bu noktasında tarayıcı, tarayıcı durumunu değiştirecek işlemler yapabilir. Örneğin, JavaScript'i yürütme, - sessionStorageveya- localStorageöğesini değiştirme, müzik ya da video oynatma, Geçmiş API'sini kullanma veya kullanıcıya istem gösterme. NoState Prefetch'te meydana gelen tek durum değişikliği, yanıtlar geldiğinde DNS önbelleğinin güncellenmesi ve bir yanıtta- Set-Cookieüstbilgisi varsa çerez deposunun güncellenmesidir.
- Kaynak gerektiğinde tarayıcı penceresine yüklenir. - Ancak önceden oluşturulmuş bir sayfanın aksine, sayfa hemen görünür olmaz. Tarayıcı tarafından oluşturulması gerekir. Tarayıcı, NoState Prefetch için kullandığı oluşturucuyu yeniden kullanmaz ve bunun yerine yeni bir oluşturucu kullanır. Sayfanın önceden oluşturulmaması, 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 Prefetch, alt kaynakları getirme işlemini sayfa gerektiğinde tamamlamamışsa tarayıcı, sayfa yükleme işlemine NoState Prefetch'in kaldığı yerden devam eder. Tarayıcının yine kaynakları getirmesi gerekir ancak NoState Prefetch başlatılmamış olsaydı gerekenden daha az kaynak getirmesi gerekir. 
Web analizi üzerindeki etki
NoState Prefetch kullanılarak yüklenen sayfalar, aracın verileri istemci tarafında mı yoksa sunucu tarafında mı topladığına bağlı olarak web analizi araçları tarafından biraz farklı zamanlarda kaydedilir.
İstemci tarafı analiz komut dosyaları, sayfa kullanıcıya gösterildiğinde sayfa görüntülemeyi kaydeder. Bu komut dosyaları, JavaScript'in yürütülmesine bağlıdır ve NoState Prefetch herhangi bir JavaScript'i yürütmez.
Sunucu tarafı analiz araçları, bir istek işlendiğinde metrikleri kaydeder. NoState Prefetch aracılığıyla yüklenen kaynaklar için, bir isteğin işlenmesi ile 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 taramadan ayırt edilebilmeleri için tüm isteklere Purpose: Prefetch üstbilgisini ekler.
Göz atın
NoStatePrefetch, Aralık 2017'de Chrome 63'te kullanıma sunuldu. Şu anda aşağıdaki amaçlarla kullanılmaktadır:
- prerenderkaynak ipucunu uygulayın
- Google arama sonuçlarındaki ilk sonucu getirme
- Chrome adres çubuğunun bir sonraki ziyaret edileceğini tahmin ettiği sayfaları getirir.
NoStatePrefetch'i nasıl kullandığınızı görmek için Chrome Internals'ı kullanabilirsiniz.
NoState Prefetch ile yüklenen sitelerin listesini görüntülemek için chrome://net-internals/#prerender sayfasına gidin.
NoState Prefetch kullanımınızla ilgili istatistikleri görüntülemek için chrome://histograms adresine gidin ve "NoStatePrefetch" ifadesini arayın. NoState Prefetch'in her kullanım alanı için bir tane olmak üzere üç farklı NoState Prefetch histogramı vardır:
- "NoStatePrefetch" (önceden oluşturma kaynak ipuçlarına göre kullanım istatistikleri)
- "gws_NoStatePrefetch" (Google arama sonuçları sayfasının kullanımına ilişkin istatistikler)
- "omnibox_NoStatePrefetch" (Chrome adres çubuğu tarafından kullanımla ilgili istatistikler)
