PWA 漸進式 Web 應用實戰:讓工具站可安裝、可離線

技术架构(更新於 2026年5月27日)

什麼是 PWA?

PWA(Progressive Web App)讓 Web 應用具備接近原生 App 的體驗:

能力 傳統 Web PWA
安裝到桌面 ✅ Add to Home Screen
離線存取 ✅ Service Worker 快取
推播通知 ✅ Push API
全螢幕執行 ✅ standalone 模式
自動更新 ✅ 背景更新 SW

對於工具庫這類高頻使用的工具站,PWA 代表使用者可以像原生 App 一樣一鍵開啟 PDF 合併、JSON 格式化等常用工具。


Web App Manifest

manifest.json 定義應用的安裝資訊:

{
  "name": "工具庫 - 線上工具合集",
  "short_name": "工具庫",
  "start_url": "/zh-TW/",
  "display": "standalone",
  "background_color": "#ffffff",
  "theme_color": "#2563eb",
  "icons": [
    { "src": "/icons/icon-192.png", "sizes": "192x192", "type": "image/png" },
    { "src": "/icons/icon-512.png", "sizes": "512x512", "type": "image/png" }
  ]
}
欄位 作用
display: standalone 隱藏瀏覽器網址列
start_url 安裝後開啟的頁面
theme_color 狀態列/標題列顏色
icons 桌面圖示(至少 192px 與 512px)

Service Worker 快取策略

快取優先(工具靜態資源)

// 適合:JS/CSS/WASM/字型等不常變動的資源
self.addEventListener('fetch', (event) => {
  event.respondWith(
    caches.match(event.request).then(cached => {
      return cached || fetch(event.request).then(response => {
        const clone = response.clone();
        caches.open('static-v1').then(cache => cache.put(event.request, clone));
        return response;
      });
    })
  );
});

網路優先(HTML 頁面)

// 適合:可能更新的 HTML 頁面
event.respondWith(
  fetch(event.request).catch(() => caches.match(event.request))
);

工具庫的快取分層

資源 策略 TTL
_next/static/** Cache First 1 年(hash 檔名)
*.wasm Cache First 1 年
*.html Network First 1 小時
i18n JSON Stale While Revalidate 1 天

離線工具体驗

PWA 離線時的使用者體驗設計:

使用者離線開啟工具庫
     ↓
Service Worker 回傳快取的 HTML/JS/CSS
     ↓
工具頁面正常載入(SSG 預渲染的 HTML)
     ↓
Client Component 啟動,工具邏輯在本機執行
     ↓
File API / WASM 處理檔案 → 完全離線可用

工具庫的所有核心工具(PDF、圖片、JSON、加密)都基於瀏覽器本機 API,天然支援離線使用——PWA 只需確保靜態資源被快取。


安裝提示最佳實務

let deferredPrompt: BeforeInstallPromptEvent;

window.addEventListener('beforeinstallprompt', (e) => {
  e.preventDefault();
  deferredPrompt = e;
  showInstallBanner(); // 顯示自訂安裝提示
});

installButton.addEventListener('click', async () => {
  deferredPrompt.prompt();
  const { outcome } = await deferredPrompt.userChoice;
  if (outcome === 'accepted') hideInstallBanner();
});

注意:不要過早顯示安裝提示。建議在使用者成功使用 2–3 個工具後再提示,轉換率更高。


總結

PWA 是工具站提升使用者留存的有效手段。Web App Manifest 提供安裝入口,Service Worker 實現離線快取,而工具庫本身的瀏覽器本機處理架構讓離線工具体驗與線上無異。

本站提供瀏覽器本地工具,免註冊即可試用 →

#PWA#Service Worker#离线#Web App Manifest#安装