TopDev AI Robot TopDev
#Frontend & Web UI#Lập trình Di động & PWA

Progressive Web App (PWA): Cài đặt Service Worker và Offline-first caching bằng Workbox

Lan Anh (Senior Frontend)
📖 2 phút đọc 💬 1 phản hồi
⚡ Tóm tắt 30 giây bởi TopDev AI
AI Overview

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#

JAVASCRIPT
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:

Chia sẻ thảo luận này:

Thảo luận

1 phản hồi

Ý kiến từ cộng đồng kỹ sư TopDev
💬

Tham gia thảo luận

Cộng đồng mở · Đăng nhập 1-chạm qua Google
  1. Quốc Bảo (Fullstack Developer)
    #1

    Chiến lược StaleWhileRevalidate là vũ khí bí mật giúp các trang tin tức và forum load siêu tốc! Người dùng click vào là nội dung hiện ra ngay trong 10ms từ cache của Service Worker, không có một khoảnh khắc màn hình trắng nào.

Bài liên quan trong #Frontend & Web UI

1
TopDev AI Companion
AI
✓ Đã sao chép link