Menggunakan Service Worker Static Routing API untuk melewati pekerja layanan untuk jalur tertentu

Dari Chrome 123, Service Worker Static Routing API tersedia. API ini memungkinkan Anda menyatakan secara deklaratif cara jalur resource tertentu harus diambil, yang berarti browser tidak perlu menjalankan pekerja layanan hanya untuk mengambil respons dari cache, atau langsung dari jaringan. API ini telah berada dalam uji coba origin sejak Chrome 116, dan postingan ini menjelaskan peluncuran API di Chrome 123.

Menggunakan API

Untuk menggunakan panggilan API event.addRoutes pada peristiwa install pekerja layanan. Teruskan daftar rute ke metode ini, dengan properti berikut:

condition
Menentukan kapan aturan berlaku. Menerima properti berikut:
  • urlPattern: Instance URLPattern, atau string yang mewakili URLPattern yang valid, yang dapat diteruskan ke konstruktor URLPattern.
  • requestMethod: String yang berisi metode Permintaan.
  • requestMode: String yang berisi mode Permintaan.
  • requestDestination: String yang berisi tujuan Permintaan.
  • runningStatus: string, "running" atau "not-running". Ini menunjukkan status service worker yang sedang berjalan.
source
Menentukan cara resource yang cocok dengan condition dimuat. Salah satu string berikut:
  • "network"
  • "cache"
  • "fetch-event"
  • "race-network-and-fetch-handler"

Pada contoh berikut, URL yang diawali dengan "/articles" akan dirutekan ke pekerja layanan jika saat ini sedang berjalan. Jika ada beberapa kondisi, misalnya urlPattern dan runningStatus, semua kondisi harus dipenuhi agar rute dapat digunakan.

addEventListener('install', (event) => {
  event.addRoutes({
    condition: {

          urlPattern: "/articles/*",
          runningStatus: "running"
    },
    source: "fetch-event"
  });
});

Pada contoh berikut, postingan ke formulir dikirim langsung ke jaringan dan mengabaikan pekerja layanan.

addEventListener('install', (event) => {
  event.addRoutes({
    condition: {
          urlPattern: "/form/*",
          requestMethod: "post"
    },
    source: "network"
  });
});

Pada contoh berikut, penyimpanan cache bernama "pictures" digunakan untuk mengambil file dengan ekstensi file .png atau .jpg.

addEventListener('install', (event) => {
  event.addRoutes({
    condition: {
      or: [
        {urlPattern: "*.png"},
        {urlPattern: "*.jpg"}
      ]
    },
    source: {
      cacheName: "pictures"
    }
  });
});

Perubahan dari uji coba origin

Uji coba origin asli menggunakan InstallEvent.registerRouter(), bukan InstallEvent.addRoutes(), metode registerRouter() hanya dapat dipanggil sekali. Perubahan ini didasarkan pada masukan komunitas terhadap uji coba asal.

API baru ini juga memanfaatkan perubahan pada URLPattern yang diperkenalkan di Chrome 121, menambahkan kemampuan untuk menentukan metode, mode, dan tujuan permintaan, serta menambahkan opsi sumber tambahan.

Dukungan di Chrome DevTools

Aturan router terdaftar ditampilkan di Tab Service Worker pada panel Application.

Aturan router ditandai di panel Application.

Di Panel Jaringan, jika permintaan cocok dengan aturan terdaftar, hal ini akan ditunjukkan di kolom ukuran. Saat mengarahkan kursor ke kolom ukuran, ID router terdaftar akan ditampilkan. Aturan yang sesuai akan ditampilkan di tab permohonan.

ID router seperti yang ditampilkan di panel Jaringan.