Strategi Tembolok Offline: CacheFirst NetworkFirst
Terapkan Cache-First untuk aset statis dan Network-First untuk respons API menggunakan Cache API serta pustaka Workbox.
Strategi Tembolok Offline: CacheFirst NetworkFirst adalah pelajaran Frontend Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Frontend Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Frontend Academy mencakup 4 pelajaran total.
Mengapa Strategi Caching Penting
Pekerja layanan dapat mencegat setiap fetch—tetapi Anda memerlukan strategi. Konten yang berbeda memerlukan aturan yang berbeda: logo sebaiknya disimpan di cache selamanya, respons API harus selalu terbaru, dan artikel berita cocok menggunakan stale-while-revalidate.
API Cache
Pekerja layanan menggunakan API Cache: penyimpanan pasangan Request → Response berdasarkan kunci dan nilai, dengan cakupan per origin. Data ini dipertahankan di antara sesi.
// open a cache:
const cache = await caches.open('v1');
// add resources:
await cache.add('/styles.css');
await cache.addAll(['/', '/app.js', '/styles.css']);
// look up:
const response = await cache.match('/styles.css');
// delete:
await cache.delete('/styles.css');Cache Dahulu
Periksa cache terlebih dahulu. Jika ditemukan, kembalikan hasilnya. Jika tidak, gunakan network sebagai fallback dan simpan respons ke cache. Paling cocok untuk: aset statis, font, logo, dan shell aplikasi.
self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request).then(cached => {
if (cached) return cached;
return fetch(event.request).then(res => {
const clone = res.clone();
caches.open('v1').then(c => c.put(event.request, clone));
return res;
});
})
);
});Network Dahulu
Coba network terlebih dahulu. Jika gagal (luring), gunakan cache sebagai fallback. Paling cocok untuk: panggilan API dan konten dinamis yang lebih mementingkan kesegaran daripada kecepatan.
self.addEventListener('fetch', (event) => {
event.respondWith(
fetch(event.request).then(res => {
const clone = res.clone();
caches.open('api-v1').then(c => c.put(event.request, clone));
return res;
}).catch(() => caches.match(event.request))
);
});Stale While Revalidate
Kembalikan cache segera (cepat), then ambil data di latar belakang dan perbarui cache untuk penggunaan berikutnya. Paling cocok untuk: avatar, artikel berita, dan data yang cukup baru.
self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request).then(cached => {
const network = fetch(event.request).then(res => {
caches.open('v1').then(c => c.put(event.request, res.clone()));
return res;
});
return cached || network;
})
);
});Network Saja
Lewati cache sepenuhnya—selalu gunakan network. Gunakan untuk permintaan yang tidak dapat disimpan di cache (endpoint autentikasi, analitik, dan mutasi).
self.addEventListener('fetch', (event) => {
if (event.request.url.includes('/api/auth')) {
event.respondWith(fetch(event.request));
return;
}
// ... other strategies
});Cache Saja
Jangan pernah menggunakan network—kembalikan cache atau gagal. Berguna untuk berkas yang telah disimpan sebelumnya di cache dan tidak ingin Anda segarkan selama sesi berlangsung.
Strategi Workbox
Workbox mengemas all strategi sebagai kelas bernama. Lebih sedikit kode dasar.
import { registerRoute } from 'workbox-routing';
import { CacheFirst, NetworkFirst, StaleWhileRevalidate } from 'workbox-strategies';
registerRoute(({ request }) => request.destination === 'image',
new CacheFirst({ cacheName: 'images' })
);
registerRoute(({ url }) => url.pathname.startsWith('/api/'),
new NetworkFirst({ cacheName: 'api', networkTimeoutSeconds: 3 })
);
registerRoute(({ request }) => request.destination === 'document',
new StaleWhileRevalidate({ cacheName: 'pages' })
);Kedaluwarsa Cache
Cache akan terus bertambah selamanya jika Anda tidak menetapkan batas. Workbox menyediakan ExpirationPlugin.
import { ExpirationPlugin } from 'workbox-expiration';
new CacheFirst({
cacheName: 'images',
plugins: [new ExpirationPlugin({
maxEntries: 50,
maxAgeSeconds: 30 * 24 * 60 * 60 // 30 days
})]
});Respons yang Dapat Disimpan di Cache
Secara bawaan, browser hanya menyimpan respons 200 ke cache. Lewati respons 4xx, 5xx, dan opaque (no-cors lintas origin) agar cache tidak dipenuhi error.
Halaman Fallback Luring
Tampilkan halaman luring yang ramah ketika navigasi gagal—pengalaman pengguna lebih baik daripada error bawaan browser.
self.addEventListener('install', (e) => {
e.waitUntil(caches.open('offline').then(c => c.add('/offline.html')));
});
self.addEventListener('fetch', (e) => {
if (e.request.mode === 'navigate') {
e.respondWith(
fetch(e.request).catch(() => caches.match('/offline.html'))
);
}
});Memilih Strategi yang Tepat
Aset statis (logo, font, CSS): Cache Dahulu. Data API (profil pengguna, feed): Network Dahulu. Konten yang kadang diperbarui (avatar, berita): Stale While Revalidate. Autentikasi: Network Saja. Berkas statis yang telah dipasang sebelumnya: Cache Saja.
Pemeriksaan Singkat
Strategi caching mana yang paling cocok untuk berkas CSS yang jarang berubah tetapi harus dimuat dengan cepat?
Ringkasan: Strategi Caching
Cache Dahulu: aset statis (paling cepat, mungkin kedaluwarsa). Network Dahulu: data API (paling baru, lebih lambat). Stale While Revalidate: sajikan cache + ambil data di latar belakang. Network Saja: autentikasi/mutasi. Cache Saja: shell yang telah dipasang sebelumnya. Gunakan Workbox untuk mengurangi kode dasar. Tetapkan batas kedaluwarsa. Tambahkan halaman fallback luring. Pilih berdasarkan jenis sumber daya.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Strategi Tembolok Offline: CacheFirst NetworkFirst” gratis?
Ya — teks lengkap “Strategi Tembolok Offline: CacheFirst NetworkFirst” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Frontend Academy, upgrade ke CoddyKit PRO. Kursus Frontend Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Strategi Tembolok Offline: CacheFirst NetworkFirst”?
Terapkan Cache-First untuk aset statis dan Network-First untuk respons API menggunakan Cache API serta pustaka Workbox. Kamu berlatih Frontend Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Frontend Academy?
Tidak diperlukan pengalaman sebelumnya. Frontend Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Strategi Tembolok Offline: CacheFirst NetworkFirst” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Frontend Academy ini?
Ya. Setiap pelajaran Frontend Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Manifest Aplikasi Web
- Pendaftaran dan Siklus Hidup Service Worker
- Strategi Tembolok Offline: CacheFirst NetworkFirst
- Notifikasi Push