网站变身App:PWA全攻略

网站变身App:PWA全攻略

四月 30, 2026 progressive web apps pwa service workers offline-first web development https deployment web hosting

为什么你的项目需要 PWA?

老实说,做原生 App 太麻烦了。iOS 和 Android 要分开写代码,等 App Store 审核,还得管两套发布流程。PWA 直接颠覆了这一切。

它让用户享受到 App 般的体验——能加到首页,全屏打开,还能离线用。你呢?就维护一套代码就好。不用纠结 App Store,也没平台专属的坑。就是你的网站,超能打。

核心秘密是 service worker:小巧的 JS 后台脚本,拦截网络请求,管缓存,还搞定离线。简单又牛。

先认清现实:PWA 行不行?

上手前,得知道边界。PWA 绑在你的 domain 上,必须用 HTTPS,还在沙盒里跑。这不是缺点,是安全保障。

好处呢?能用上原生 API,比如定位、相机、传感器啥的。更新超快,一推代码,用户下次访问就拿到。不用等审核。

怎么做 PWA:五步走起

把现有网站变 PWA,就五个关键件。一步步来:

1. App Manifest:PWA 的身份证

这 JSON 文件告诉系统你的 App 长啥样:

  • 完整名和短名
  • 主题色、背景色,融进系统
  • 运行范围(scope)
  • 启动页面
  • 描述文字
  • 首页图标
  • 屏幕方向

真实例子:

{
    "name": "我的牛逼 App",
    "short_name": "牛逼App",
    "theme_color": "#2196F3",
    "background_color": "#FFFFFF",
    "display": "standalone",
    "scope": "/",
    "start_url": "/",
    "description": "超级好用的 App",
    "orientation": "any",
    "icons": [
        {
            "src": "/assets/icon-192.png",
            "sizes": "192x192",
            "type": "image/png"
        },
        {
            "src": "/assets/icon-512.png",
            "sizes": "512x512",
            "type": "image/png"
        }
    ]
}

方向默认 "any",除非你有硬道理锁死。手机用户爱自由。

2. HTML 里链接 Manifest

在首页 <head> 加这一行(单页应用放 index.html):

<link rel="manifest" href="/assets/manifest.json">

浏览器就知道去哪找配置了。

3. 设计离线页面

Service worker 会缓存用户逛过的页面。离线时没缓存的,得优雅处理。建个 offline.html,告诉用户“网络断了”。

单页应用可以软链接到 index.html,让用户回缓存内容:

ln -s index.html offline.html

别让用户卡死在黑屏。

4. 注册 Service Worker

</body> 前加脚本:

<script>
  if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/service-worker.js')
      .then(reg => console.log('Service Worker 注册成功'))
      .catch(err => console.log('Service Worker 注册失败'));
  }
</script>

5. 写 Service Worker

这里实现离线魔法。拦截请求,缓存响应,没网就给缓存的:

const CACHE_NAME = 'v1';
const urlsToCache = [
  '/',
  '/styles/main.css',
  '/scripts/main.js',
  '/offline.html'
];

self.addEventListener('install', event => {
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(cache => cache.addAll(urlsToCache))
  );
});

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request)
      .then(response => response || fetch(event.request))
      .catch(() => caches.match('/offline.html'))
  );
});

安装时缓存关键文件,有缓存优先用,没网 fallback 到离线页。

HTTPS 必须有,别商量

Service worker 只认 HTTPS。这是安全刚需。还没上 HTTPS?赶紧的。在 NameOcean,我们的 SSL 证书和 hosting 包自动搞定。

部署和测试

放好 manifest、service worker 和 HTML。测试走起:

  1. 按 F12,开 DevTools → Application
  2. 查 manifest 没报错
  3. Service Workers 区看注册情况
  4. 模拟离线(Network → Offline)
  5. 试安装 PWA(浏览器提示或菜单)

真·收获

用户拿 App 体验,你省掉 iOS/Android 双代码。更新秒发,你掌控发布。

小投入,大回报。

懒人捷径

嫌麻烦?上 PWABuilder.com,一键生成大半。工具帮 boilerplate,你专注核心。

总之,PWA 不是玩具。给用户 App 级享受,你专心开发就好。

Read in other languages:

RU BG EL CS UZ TR SV FI RO PT PL NB NL HU IT FR ES DE DA EN