</>
⌕
Senior #service-worker#pwa#offline#cache-api

Service Worker và PWA hoạt động thế nào? Các chiến lược cache?

⚡ Trả lời nhanh

Service Worker là script chạy nền tách khỏi trang, đứng giữa trang và mạng để chặn fetch, cache bằng Cache API, hỗ trợ offline, push và background sync. Chỉ chạy trên HTTPS (ngoại trừ localhost). PWA kết hợp Service Worker, web manifest và HTTPS để cài được như app.

// sw.js
self.addEventListener("install", (e) => {
  e.waitUntil(caches.open("v1").then((c) => c.addAll(["/", "/app.css", "/app.js"])));
});
self.addEventListener("fetch", (e) => {
  e.respondWith(caches.match(e.request).then((hit) => hit || fetch(e.request)));
});
// Đăng ký (trong trang): navigator.serviceWorker.register("/sw.js");
Chiến lượcDùng cho
Cache FirstAsset tĩnh có hash
Network FirstAPI, HTML cần dữ liệu mới
Stale-While-RevalidateNội dung chấp nhận cũ chút, cập nhật nền
Network Only / Cache OnlyRequest đặc biệt / app shell offline
  • Vòng đời: install, waiting, activate. Worker mới đợi các tab cũ đóng, trừ khi gọi skipWaiting() và clients.claim().
  • Worker không truy cập DOM, giao tiếp qua postMessage; có thể bị trình duyệt dừng bất cứ lúc nào nên không giữ state trong biến.
  • PWA cần manifest.json (name, icons, start_url, display) để installable.
  • Dọn cache cũ trong sự kiện activate theo tên phiên bản.
🃏 Ôn bằng flashcard