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-CN/",
  "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#安装