Hizmet Çalışanı Statik Yönlendirme API'si Kaynak Denemesi

Hizmet çalışanları, web sitelerinin çevrimdışı çalışmasına ve kendileri için özel önbelleğe alma kuralları oluşturmasına olanak tanıyan güçlü bir araçtır. Bir hizmet çalışanı fetchişleyicisi, kontrol ettiği bir sayfadan gelen her isteği görür ve isteğe hizmet çalışanı önbelleğinden yanıt sunup sunmayacağına karar verebilir. Hatta URL'yi tamamen farklı bir yanıt almak için yeniden yazabilir (ör. yerel kullanıcı tercihlerine göre).

Ancak bir sayfa bir süredir ilk kez yüklendiğinde ve kontrol eden hizmet çalışanı şu anda çalışmıyorsa hizmet çalışanları için performans maliyeti olabilir. Tüm getirme işlemlerinin hizmet çalışanı üzerinden yapılması gerektiğinden, tarayıcının hangi içeriğin yükleneceğini bilmesi için hizmet çalışanının başlatılmasını ve çalışmasını beklemesi gerekir. Bu başlangıç maliyeti, önbelleğe alma stratejileri aracılığıyla performansı artırmak için hizmet işçilerini kullanan geliştiriciler için küçük ancak önemli olabilir.

Navigasyon ön yükleme, sorunu çözmek için kullanılan bir yaklaşımdır. Bu yaklaşım, hizmet çalışanının başlatılmasına paralel olarak ağ üzerinden navigasyon isteklerinin yapılmasına olanak tanır. Ancak bu yaklaşım, ilk navigasyon istekleriyle sınırlıdır ve hizmet çalışanını kritik yola dahil etmeye devam eder. Gezinme önyüklemesi kullanıma sunulduktan sonra, bazı isteklerin hizmet çalışanı başlatılırken hiç engellenmemesi de dahil olmak üzere sorun alanına daha genel bir çözüm geliştirmek için çeşitli çalışmalar yapıldı.

Hizmet Çalışanı Statik Yönlendirme API'si

Chrome 116'dan itibaren deneysel Service Worker Statik Yönlendirme API'si, bu tür bir çözümün ilk adımını test etmek için kullanılabilir. Yüklenen bir hizmet çalışanı, belirli kaynak yollarının nasıl getirileceğini açık bir şekilde belirtmek için Hizmet Çalışanı Statik Yönlendirme API'sini kullanabilir.

API'nin ilk sürümünde, yolların her zaman hizmet çalışanından değil ağdan yayınlanacağı beyan edilebilir. Kontrol edilen bir URL daha sonra yüklendiğinde tarayıcı, hizmet işleyicisi başlatılmadan önce bu yollardan kaynak getirmeye başlayabilir. Bu işlem, hizmet çalışanına ihtiyaç duymadığınızı bildiğiniz yollardan hizmet çalışanını kaldırır.

Hizmet çalışanı, API'yi kullanmak için install etkinliğinde bir dizi kuralla event.registerRouter çağrısı yapar:

self.addEventListener('install', event => {
  if (event.registerRouter) {
    // Go straight to the network and bypass invoking "fetch" handlers for all
    // same-origin URLs that start with '/form/'.
    event.registerRouter([{
      condition: {
        urlPattern: {pathname: '/form/*'},
      },
      source: 'network',
    }]);
  }
});

Her kuralın genellikle iki özelliği vardır:

  • condition: Kaynak yollarını eşleştirmek için URL Kalıp API'sini kullanarak kuralın ne zaman geçerli olacağını belirtir. Mülk, bir URLPattern örneği veya URLPattern yapıcısına iletilmeye uygun eşdeğer basit nesneyi alabilir (örneğin, new URLPattern({pathname: '*.jpg'}) veya yalnızca {pathname: '*.jpg'}).

    URL kalıplarının esnekliği, kuralın bir yol altındaki herhangi bir kaynak kadar basit bir öğeyi çok özel ve ayrıntılı koşullarla eşleştirebileceği anlamına gelir. Bu kalıplar, popüler yönlendirme kitaplıklarının kullanıcıları tarafından genellikle bilinir.

  • source: condition ile eşleşen kaynakların nasıl yükleneceğini belirtir. Şu anda yalnızca 'network' değeri desteklenmektedir (kaynağı doğrudan ağ üzerinden yüklemek için hizmet çalışanı atlanır). Ancak gelecekte bu özelliği diğer değerlere de genişletmeyi planlıyoruz.

Kullanım alanları

Açıklandığı gibi, API'nin ilk sürümü temel olarak bazı yollar için hizmet çalışanı kontrolünden kaçış kapısı niteliğindedir. Bu özelliğin kullanılacağı yerler, hizmet işçinizi nasıl kullandığınıza ve kullanıcıların sitenizde nasıl gezindiğine bağlı olacaktır.

Örneğin, sitenizde öncelikle önbelleğe alma stratejisi (ağya geri dönme) kullanılıyorsa ancak çok nadiren ziyaret edilen bazı içerikler varsa (arşivlenmiş içerik veya RSS feed'leri gibi) bu içeriklerin önbelleğe alınmasının çok az veya hiç değeri yoktur. Bu yolların ağdan getirilmesini kısıtlamak yalnızca hizmet çalışanında ayarlanabilir ancak hizmet çalışanının bu isteklerin nasıl işleneceğine karar vermek için başlatılması ve çalıştırılması gerekir.

Statik yönlendirme API'si ise birkaç açıklayıcı satırla hizmet çalışanını tamamen atlar:

self.addEventListener('install', event => {
  if (event.registerRouter) {
    event.registerRouter([{
      condition: {
        urlPattern: {pathname: '/feeds/*.xml'},
      },
      source: 'network',
    }, {
      condition: {
        urlPattern: {pathname: '/archives/*'},
      },
      source: 'network',
    }]);
  }
});

Hizmet Çalışanı Statik Yönlendirme API'si geliştikçe bu yapılandırma daha esnek hale gelecek ve ağ getirme ve hizmet çalışanı başlatma işlemlerini açık bir şekilde yarıştırmak gibi daha fazla senaryoyu destekleyecek. Daha fazla bilgi için API'nin olası "nihai biçimi" hakkında spesifikasyon açıklamacısının keşfine bakın.

Service Worker statik yönlendirme API'sini deneme

Service Worker Static Routing API, 116 sürümünden itibaren Chrome'da bir kaynak denemesi kapsamında kullanılabilir. Bu deneme, geliştiricilerin API'yi sitelerinde gerçek kullanıcılarla test ederek etkisini ölçmelerine olanak tanır. Kaynak denemeleri hakkında arka plan bilgileri için "Kaynak denemelerini kullanmaya başlama" başlıklı makaleyi inceleyin.

Yerel test için Hizmet Çalışanı Statik Yönlendirme API'si, chrome://flags/#service-worker-static-router adresindeki bir işaretle veya --enable-features=ServiceWorkerStaticRouter gibi komut satırından Chrome çalıştırılarak etkinleştirilebilir.

Geri bildirim ve gelecekteki yönler

Hizmet Çalışanı Statik Yönlendirme API'si aktif olarak geliştirilmekte ve şekillendirilmeye devam etmektedir. Bu özellik sizin için yararlı olabilirse lütfen kaynak denemesi üzerinden deneyin ve API, uygulama ve mevcut işlevler hakkında geri bildirimde bulunun.