Precaching dengan Workbox

Precaching adalah salah satu hal paling umum yang akan Anda lakukan di pekerja layanan, dan Workbox menawarkan banyak fleksibilitas tentang cara Anda dapat menyelesaikan tugas penting ini, terlepas dari alat build Workbox mana yang Anda pilih. Dalam panduan ini, Anda akan mempelajari cara melakukan pra-cache aset menggunakan generateSW dan injectManifest, serta metode mana yang paling cocok untuk project Anda.

Precaching dengan generateSW

generateSW adalah cara termudah untuk melakukan pra-cache aset di Workbox. Hal besar yang perlu diingat tentang generateSW adalah bahwa Anda tidak menulis pekerja layanan Anda sendiri—Anda meminta Workbox untuk membuat pekerja layanan untuk Anda. Namun, Anda dapat memengaruhi perilakunya melalui berbagai opsi konfigurasi.

generateSW melakukan berbagai hal secara default bergantung pada alat build yang Anda gunakan. Saat menggunakan workbox-webpack-plugin, Anda tidak perlu menentukan opsi konfigurasi apa pun. Secara default, plugin akan melakukan precache semua yang disertakan webpack dalam grafik dependensinya dan menulis pekerja layanan bernama service-worker.js ke direktori yang ditentukan oleh output.path

Di sisi lain, jika Anda menggunakan workbox-build atau workbox-cli, hanya aset HTML, CSS, dan JavaScript yang dibaca dari sistem file lokal yang akan di-pra-cache secara default. Terkait konfigurasi, Anda harus menentukan swDest dan opsi globDirectory di konfigurasi generateSW agar precaching berfungsi. Kemungkinannya adalah, Anda juga ingin mengonfigurasi opsi tambahan yang memengaruhi perilaku pekerja layanan Anda, jadi baca dokumentasinya.

Precaching dengan injectManifest

Menggunakan injectManifest tidak semudah menggunakan generateSW, tetapi Anda mengorbankan kemudahan penggunaan untuk fleksibilitas yang lebih besar. Jika generateSW menangani seluruh pembuatan pekerja layanan untuk Anda, injectManifest akan mengambil pekerja layanan yang Anda tulis sebagai sumbernya dan memasukkan daftar URL untuk melakukan pra-cache, sedangkan pekerja layanan lainnya apa adanya.

Saat menggunakan injectManifest, Anda bertanggung jawab untuk menyiapkan logika precaching. Saat memeriksa pekerja layanan input Anda, injectManifest akan mencari variabel self.__WB_MANIFEST khusus dan menggantinya dengan manifes precache. Jika variabel ini tidak ada, injectManifest akan menampilkan error.

Daftar entri dalam manifes pra-cache dapat diubah dengan opsi konfigurasi tambahan.

Perbandingan per aspek

Klik setiap tab di bawah untuk membandingkan penggunaan metode generateSW dan injectManifest:

Karena generateSW menghasilkan pekerja layanan, Anda hanya perlu menentukan konfigurasi. Berikut adalah contoh yang menggunakan workbox-build:

// build-sw.js
import {generateSW} from 'workbox-build';

generateSW({
  swDest: './dist/sw.js',
  globDirectory: './dist',
  globPatterns: [
    '**/*.js',
    '**/*.css',
    '**/*.svg'
  ]
});

Pekerja layanan kemudian dapat dibangun pada command line dengan Node:

node build-sw.js

Karena injectManifest memerlukan pekerja layanan sumber, contoh yang layak minimal memerlukan file pekerja layanan sumber. Jika yang diperlukan hanyalah precache, pekerja layanan input tersebut mungkin terlihat seperti ini:

import {precacheAndRoute} from 'workbox-precaching';

precacheAndRoute(self.__WB_MANIFEST);

Perhatikan string self.__WB_MANIFEST. Ini adalah placeholder yang diganti Workbox dengan manifes precache. Berikut adalah konfigurasi yang valid untuk kasus penggunaan ini:

// build-sw.js
import {injectManifest} from 'workbox-build';

injectManifest({
  swSrc: './src/sw.js',
  swDest: './dist/sw.js',
  globDirectory: './dist',
  globPatterns: [
    '**/*.js',
    '**/*.css',
    '**/*.svg'
  ]
});

injectManifest lebih disarankan jika Anda memiliki persyaratan yang kompleks, seperti pemilihan rute lanjutan, strategi penyimpanan dalam cache kustom, atau hal lain yang tidak tercakup dalam opsi yang disediakan oleh generateSW.

Kesimpulan

Precaching di Workbox jauh lebih sederhana dibandingkan jika Anda harus mengelola precaching sendiri, terutama jika aset berversi yang dikompilasi oleh pemaket bermasalah. Namun, precaching bukanlah satu-satunya hal yang akan Anda lakukan di pekerja layanan. Sambil melanjutkan, Anda akan mempelajari teknik lain, seperti caching runtime.