Bu yayını Service Worker önbellek API'sinde oldukça küçük bir güncellemeyle ilgili olarak yazmam istendi. Bunun ayrı bir makale olarak ele alınması gerektiğini düşünmüyordum ama sonunda taş-kağıt-makas oyununa dönüşen uzun bir tartışmadan sonra kaybettim, işte burada.
Chrome'un Service Worker önbellek API'si uygulamasında yapılan güncellemeleri öğrenmeye hazır mısınız?
Sizi duyamıyorum! Chrome'un Service Worker önbellek API'si uygulamasında yapılan güncellemeleri öğrenmeye hazır mısınız?
(Yalnızca sandalyenize oturup “YEAHHH!” diye bağırdıysanız okumaya devam edebilirsiniz. Aynı anda kement gibi davranmak isteğe bağlıdır, ancak tavsiye edilir).
cache.addAll Chrome 46'da kullanıma sunuldu
Evet. Doğru. Önbellek! Tümünü ekle! Chrome 46!
Peki, iğneleme bir yana, bu aslında oldukça büyük bir mesele. Çünkü cache.addAll
, önbellekteki "temeller" çoklu dolgusunun kalan son kısmı olduğundan artık gerekli değil.
cache.addAll
şu şekilde çalışır:
// when the browser sees this SW for the first time
self.addEventListener('install', function(event) {
// wait until the following promise resolves
event.waitUntil(
// open/create a cache named 'mysite-static-v1'
caches.open('mysite-static-v1').then(function(cache) {
// fetch and add this stuff to it
return cache.addAll([
'/',
'/css/styles.css',
'/js/script.js',
'/imgs/cat-falls-over.gif'
]);
})
);
});
addAll
, bir URL ve istek dizisi alıp bunları getirir ve önbelleğe ekler. Bu işlem işlemseldir. Getirme veya yazma işlemlerinden biri başarısız olursa tüm işlem başarısız olur ve önbellek önceki durumuna döner. Bu, özellikle yukarıdaki gibi yükleme işlemleri için kullanışlıdır. Bu tür işlemlerde, tek bir hatanın genel bir hata olması gerekir.
Yukarıdaki örnek, bir hizmet çalışanı içindedir ancak caches API'ye sayfalardan da tamamen erişilebilir.
Firefox, geliştirici sürümünde bu API'yi zaten desteklemektedir. Bu nedenle, hizmet çalışanı uygulamasının geri kalanında da bu API yer alacaktır.
Hepsi bu kadar değil. Süreçte daha fazla önbellek iyileştirmesi var...
cache.matchAll Chrome 47'de geliyor
Bu, birden çok eşleşme almanıza olanak tanır:
caches.open('mysite-static-v1').then(function(cache) {
return cache.matchAll('/');
}).then(function(responses) {
// …
});
Yukarıdakiler, mysite-static-v1
klasöründe /
ile eşleşen her şeyi alır. Önbellek, bağımsız olarak önbelleğe alınabiliyorsa (ör. farklı Vary
üstbilgilerine sahip olmaları durumunda) her URL için birden fazla girişe sahip olmanıza olanak tanır.
Firefox bunu geliştirici sürümünde zaten desteklemektedir. Bu nedenle, hizmet çalışanı uygulamasının geri kalanında da bu çözüm yer alacaktır.
Önbellek sorgu seçenekleri yakında Chrome'da kullanıma sunulacak
Aşağıda oldukça standart bir getirme işleyicisi verilmiştir:
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request).then(function(response) {
return response || fetch(event.request);
})
);
});
/
önbelleğe alınmışsa ve /
için bir istek alırsak bu istek önbellekten sunulur. Ancak, /?utm_source=blahblahwhatever
için bir istek alırsak bu istek önbellekten gelmez. Eşleştirme sırasında URL arama dizesini yoksayarak bu sorunu çözebilirsiniz:
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request, {
ignoreSearch: true
}).then(function(response) {
return response || fetch(event.request);
})
);
});
/?utm_source=blahblahwhatever
, /
girişiyle eşleştirilecek! Tam seçenekler şunlardır:
ignoreSearch
- hem istek bağımsız değişkeninde hem de önbelleğe alınan isteklerde URL'nin arama kısmını yoksayignoreMethod
- istek bağımsız değişkeninin yöntemini yoksayın. Böylece bir POST isteğinin önbellekteki bir GET girişiyle eşleşebilmesiignoreVary
- önbelleğe alınan yanıtlarda değişiklik başlığını yoksay
Firefox bunu zaten kendi tarayıcılarında desteklemektedir. O halde şimdiye kadar bu konuda bilgi sahibisiniz. Ben Kelly'ye tüm bunları Firefox'a yükleyerek ne kadar harika olduğunu anlatın.
Chrome'da önbellek sorgu seçeneklerini uygulamak istiyorsanız crbug.com/426309 adresini ziyaret edin.
Bir sonraki sefer, "Önbellek API'sinde uyguladığımız uygulamalar" ile ilgili başka bir heyecan verici bölüm için görüşmek üzere!