Latihan 1 dari materi Service Worker Caching di Performance — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Lengkapi class CacheStrategy di kode awal dengan tiga method. Cache-nya sebuah Map (key url, value data), dan network-nya pura-pura: hasil ambil dari network untuk url apa pun adalah string "fetched:" + url, misalnya "fetched:/api/news". Tiap method mengembalikan object dengan dua key, berurutan source lalu data.
networkFirst(url, cache): network di latihan ini selalu online, jadi selalu ambil dari network: simpan "fetched:" + url ke cache, lalu kembalikan { source: "network", data: "fetched:" + url }. Isi cache yang lama gak dipakai, tapi ditimpa dengan yang baru.
staleWhileRevalidate(url, cache): kalau ada di cache, kembalikan isi lama { source: "cache", data: <isi cache> } lalu perbarui cache dengan "fetched:" + url. Kalau gak ada, sama seperti cache first: simpan, lalu kembalikan { source: "network", data: "fetched:" + url }.
Yang dicek:
new CacheStrategy().cacheFirst("/img/logo.png", new Map()) mengembalikan { source: "network", data: "fetched:/img/logo.png" }
new CacheStrategy().networkFirst("/api/news", new Map()) mengembalikan { source: "network", data: "fetched:/api/news" }
new CacheStrategy().staleWhileRevalidate("/profile", new Map()) mengembalikan { source: "network", data: "fetched:/profile" }
Cek tersembunyi: cacheFirst("/css/main.css", c) dipanggil dua kali dengan Map yang sama, dan panggilan kedua harus { source: "cache", data: "fetched:/css/main.css" }.
networkFirst dengan Map yang sudah berisi "old" untuk "/api/news" tetap mengembalikan { source: "network", ... }, dan isi cache-nya jadi "fetched:/api/news".
staleWhileRevalidate dengan Map yang sudah berisi "old" untuk "/profile" mengembalikan { source: "cache", data: "old" }, dan isi cache-nya jadi "fetched:/profile".
Cek tersembunyi: Map yang sudah berisi "cached-font" untuk "/fonts/roboto.woff2", dan cacheFirst harus mengembalikan { source: "cache", data: "cached-font" }, isinya apa adanya.
Baris const cache, const strategy dan console.log di kode awal biarkan saja.
Hint
Ketiga method punya pola yang sama: cek cache dengan cache.has(url), lalu putuskan mengembalikan isi cache atau hasil network. Hasil network selalu 'fetched:' + url, dan sebelum dikembalikan, simpan dulu ke cache.
Di cacheFirst: if (cache.has(url)) return { source: 'cache', data: cache.get(url) }. Di luar if: const fresh = 'fetched:' + url; cache.set(url, fresh); return { source: 'network', data: fresh }. networkFirst cukup bagian di luar if itu saja.
staleWhileRevalidate: if (cache.has(url)) { const stale = cache.get(url); cache.set(url, 'fetched:' + url); return { source: 'cache', data: stale }; } lalu sisanya sama dengan cacheFirst. Ingat urutan key: source dulu, baru data.
</>{ }.css=>#idfn()
Versi baru
HyperSheets
bagian dari BelajarWeb.dev
0%
Membuka gerbang…
HyperSheets
Memperbarui Aplikasi
Versi baru tersedia. Halaman akan dimuat ulang otomatis...