FAQ?
知道PWA吗
PWA(Progressive Web App,渐进式网页应用)是一种结合了 Web 和原生 App 优势的应用模型。它不是某一项单一技术,而是由多项技术组合而成的 Web 应用,包括 Manifest、Service Worker 、Web Push、Notification 等。
核心特征:
- 渐进式:可适用于所有浏览器,低版本降级可用
- 响应式:适配不同终端
- 可离线:通过 Service Worker 缓存资源,支持离线访问
- 类 App 交互:可安装到桌面,启动时无浏览器地址栏
- 即时更新:通过 Service Worker 更新机制保持最新
- 安全:必须通过 HTTPS 提供
- 可被搜索引擎检索
- 支持推送通知
关键技术:
- Manifest(应用清单):通过 JSON 文件定义应用图标、名称、启动方式等
{
"name": "My PWA",
"short_name": "PWA",
"start_url": "/",
"display": "standalone",
"background_color": "#fff",
"theme_color": "#000",
"icons": [
{ "src": "/icon.png", "sizes": "192x192", "type": "image/png" }
]
}
<link rel="manifest" href="/manifest.json">
- Service Worker:在浏览器后台独立线程运行的脚本,可拦截网络请求、缓存资源、实现离线访问和消息推送
// 注册 Service Worker
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js').then(reg => {
console.log('注册成功', reg.scope)
})
}
// sw.js
const CACHE_NAME = 'v1'
const CACHE_LIST = ['/index.html', '/main.js', '/main.css']
self.addEventListener('install', e => {
e.waitUntil(caches.open(CACHE_NAME).then(c => c.addAll(CACHE_LIST)))
})
self.addEventListener('fetch', e => {
e.respondWith(caches.match(e.request).then(res => res || fetch(e.request)))
})
- Web Push & Notification:通过 Push API 和 Notification API 实现消息推送
优点: 跨平台、可索引、低存储成本、可离线、即时更新 缺点: iOS Safari 对 PWA 支持较晚且有限制;推送依赖用户授权;首屏加载仍依赖网络