Progressive Web App (PWA): Cài đặt Service Worker và Offline-first caching bằng Workbox
Biến Website thành ứng dụng di động có thể cài đặt Progressive Web App PWA cho phép website của bạn: - Có icon riêng trên màn hình chính của điện thoại Add to Home Screen. - Chạy toàn màn hình không …
☰ Mục lục bài viết (4 phần) Mở / Đóng mục lục
Biến Website thành ứng dụng di động có thể cài đặt#
Progressive Web App (PWA) cho phép website của bạn:
- Có icon riêng trên màn hình chính của điện thoại (Add to Home Screen).
- Chạy toàn màn hình không có thanh địa chỉ của trình duyệt.
- Hoạt động ngay cả khi người dùng bị mất kết nối mạng hoặc đi vào vùng sóng yếu (Offline Mode).
Thư viện Workbox của Google giúp việc cấu hình Service Worker và chiến lược bộ đệm trở nên trực quan và đáng tin cậy hơn bao giờ hết.
3 Chiến lược Caching kinh điển với Workbox#
import { registerRoute } from 'workbox-routing';
import { CacheFirst, NetworkFirst, StaleWhileRevalidate } from 'workbox-strategies';
import { ExpirationPlugin } from 'workbox-expiration';
// 1. Tài nguyên tĩnh (Ảnh, Font, CSS, JS): Dùng CacheFirst
registerRoute(
({ request }) => request.destination === 'image' || request.destination === 'font',
new CacheFirst({
cacheName: 'static-assets',
plugins: [
new ExpirationPlugin({ maxEntries: 60, maxAgeSeconds: 30 * 24 * 60 * 60 }) // Giữ 30 ngày
]
})
);
// 2. Nội dung bài viết thảo luận: Dùng StaleWhileRevalidate
// Trả về cache ngay lập tức để người dùng đọc trước, đồng thời fetch bản mới ngầm
registerRoute(
({ url }) => url.pathname.startsWith('/d/'),
new StaleWhileRevalidate({
cacheName: 'community-posts'
})
);
// 3. API tài khoản & thanh toán: Dùng NetworkFirst (Luôn ưu tiên mạng)
registerRoute(
({ url }) => url.pathname.startsWith('/api/user'),
new NetworkFirst({
cacheName: 'user-profile',
networkTimeoutSeconds: 3 // Sau 3s rớt mạng mới dùng cache
})
);
Trải nghiệm người dùng tuyệt vời#
Khi mất mạng hoàn toàn, người dùng vẫn có thể mở app và đọc lại các bài thảo luận mà họ đã từng xem trước đó, thay vì nhìn thấy hình ảnh chú khủng long báo mất kết nối của Chrome.
Góc thảo luận#
Ứng dụng web của bên bạn đã hỗ trợ cài đặt PWA chưa? Tỷ lệ người dùng cài đặt icon ra màn hình chính có nhiều không?
Xem thêm nội dung liên quan:
Thảo luận
1 phản hồi
Tham gia thảo luận
Bài liên quan trong #Frontend & Web UI
-
Xây dựng Voice AI Agent thời gian thực với WebRTC và Whisper Live: Độ trễ dưới 500ms
Lan Anh (Senior Frontend) · 💬 1 -
Tối ưu SEO cho Website Client-Side Rendering: Dynamic Rendering vs Static Export
Lan Anh (Senior Frontend) · 💬 1 -
Debug Memory Leak trong Single Page Application bằng Chrome DevTools Memory Profiler
Lan Anh (Senior Frontend) · 💬 1 -
Viết Component Accessible (a11y) chuẩn WAI-ARIA: Giúp website thân thiện với mọi đối tượng
Lan Anh (Senior Frontend) · 💬 1 -
Deep-dive React 19 Actions và useActionState: Đơn giản hóa quản lý Form không cần thư viện ngoài
Lan Anh (Senior Frontend) · 💬 1