Service Worker
- Okunuşu
- sörvis vörkır
Kısaca
Service worker, tarayıcının arka planda, sayfadan ayrı çalıştırdığı, ağ isteklerini yakalayıp çevrimdışı kullanımı ve push mesajlarını sağlayan betiktir.
Service worker nedir?
Service worker, tarayıcının herhangi bir web sayfasından ayrı olarak arka planda çalıştırdığı özel bir JavaScript dosyasıdır. Web uygulamanızla ağ arasında programlanabilir bir proxy gibi durur: sayfanın HTML, betik, görsel veya API verisi için yaptığı her istek onun üzerinden geçebilir ve service worker yanıtı önbellekten mi vereceğine, ağa mı gideceğine, yoksa ikisini birleştireceğine karar verir.
Bir sayfa service worker'ı navigator.serviceWorker.register() ile kaydeder; tarayıcı da onu yükleme (installing), bekleme (waiting) ve etkinleşme (activating) yaşam döngüsünden geçirir. Worker, önemli dosyaları genellikle önceden önbelleğe aldığı install, istekleri işlediği fetch ve bildirim gösterebildiği push gibi olaylara tepki verir. Service worker'ların DOM'a erişimi yoktur, yalnızca HTTPS üzerinden (geliştirme sırasında localhost'ta da) çalışır, boştayken tarayıcı tarafından durdurulur ve yeni bir olay geldiğinde yeniden başlatılır.
Postanızı eleyen bir asistan düşünün: bazı mektuplar hemen bir dosya dolabından yanıtlanır, yalnızca geri kalanı size iletilir. Service worker'lar aşamalı web uygulamalarının (PWA) temel teknolojisidir; çevrimdışı sayfaları, daha hızlı tekrar ziyaretleri, arka planda eşzamanlamayı ve web push bildirimlerini mümkün kılar.
Service worker sıklıkla web worker ile karıştırılır. İkisi de JavaScript'i ana iş parçacığının dışında çalıştırır; ancak web worker tek bir sayfaya aittir ve ağır hesaplamalar için kullanılırken, service worker kapsamındaki (scope) her sayfayı denetler, ağ trafiğini yakalar ve sekme kapatıldıktan sonra da çalışmaya devam edebilir. Hatalı bir service worker eski dosyaları sunmaya devam edebileceğinden güncellemeler dikkat gerektirir; örneğin önbellek adlarını sürümlemek ve yeni worker etkinleştiğinde eski önbellekleri silmek gibi.
Önemli noktalar
- Service worker, bir sitenin ağ isteklerini yakalayabilen arka plan betiğidir.
- Çevrimdışı desteği, önbellek stratejilerini, push bildirimlerini ve arka planda eşzamanlamayı mümkün kılar.
- DOM'a erişimi yoktur ve
localhostdışında HTTPS gerektirir. - Sayfaları denetlemeden önce yükleme, bekleme ve etkinleşme aşamalarından geçer.
- Web worker'ın aksine yalnızca bir sayfayı değil, kapsamındaki her sayfayı denetler.
Örnek
// main.js: register the service worker
navigator.serviceWorker.register("/sw.js");
// sw.js: pre-cache key files, then answer requests from the cache first
self.addEventListener("install", (event) => {
event.waitUntil(caches.open("v1").then((c) => c.addAll(["/", "/app.css"])));
});
self.addEventListener("fetch", (event) => {
event.respondWith(
caches.match(event.request).then((cached) => cached || fetch(event.request))
);
});Sık sorulan sorular
Service worker ile web worker arasındaki fark nedir?
Web worker, tek bir sayfa için ağır JavaScript işlerini arka planda çalıştırır. Service worker ise kapsamındaki her sayfa için ağ proxy'si gibi davranır, istekleri önbellekten yanıtlayabilir ve site açık olmasa bile push mesajları alabilir.
Service worker'lar çevrimdışı çalışır mı?
Evet, asıl kullanım alanlarından biri budur. Service worker bir sayfanın ihtiyaç duyduğu dosyaları önbelleğe aldıktan sonra bunları ağ bağlantısı olmadan sunabilir; böylece site çevrimdışıyken de yüklenir.
Service worker'ım neden güncellenmiyor?
Yeni bir service worker yüklenir ama eskisinin denetlediği tüm sekmeler kapanana kadar bekler; bu yüzden basit bir yenileme çoğu zaman yetmez. Yeni worker'da self.skipWaiting() çağırmak onu hemen etkinleştirir; tarayıcı geliştirici araçları da test için yenilemede güncelleme seçeneği sunar.
İlgili sayfalar
- PWAWeb Geliştirme, s. 36PWA, modern web API'leriyle geliştirilen, bir cihaza kurulabilen, çevrimdışı çalışabilen ve tek kod tabanından yerel uygulama gibi davranan bir web sitesidir.
- ÖnbellekBackend ve API'ler, s. 34Önbellek, sık kullanılan verilerin kopyalarını tutan hızlı ve geçici bir depolama katmanıdır; sonraki istekler yavaş işi tekrarlamadan hızla karşılanır.
- Web TarayıcısıWeb Geliştirme, s. 57Web tarayıcısı, sunuculardan web sayfalarını alıp HTML, CSS ve JavaScript'i ekranda gördüğünüz etkileşimli sayfalara dönüştüren uygulamadır.
- JavaScriptWeb Geliştirme, s. 25JavaScript, web tarayıcılarında sayfaları etkileşimli hale getiren ve Node.js gibi çalışma ortamlarıyla sunucularda da çalışan programlama dilidir.
- HTTPSGüvenlik, s. 15HTTPS, tarayıcı ile web sitesi arasındaki trafiği TLS ile şifreleyen, verileri dinlemeye ve değiştirilmeye karşı koruyan HTTP'nin güvenli sürümüdür.
- Local StorageWeb Geliştirme, s. 29Local storage, bir sitenin kullanıcının cihazında anahtar-değer çiftleriyle metin saklamasını sağlayan tarayıcı özelliğidir; veri tarayıcı kapansa da kalır.
- Web WorkerWeb Geliştirme, s. 58Web worker, JavaScript'i bir arka plan iş parçacığında çalıştıran tarayıcı özelliğidir; böylece ağır hesaplamalar çalışırken sayfanın arayüzü donmaz.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin