什么是 PWA?
PWA(Progressive Web App,渐进式 Web 应用)是一种利用现代 Web 技术构建的应用,可以像原生应用一样安装到用户设备上,拥有原生应用的体验但通过浏览器访问。
PWA 核心特性
- 可安装 - 用户可以"安装"到桌面/主屏幕
- 离线可用 - Service Worker 支持离线访问
- 推送通知 - 可以发送 Web 推送通知
- 后台同步 - 网络恢复后自动同步数据
构建视频 PWA 的关键步骤
1. 创建 Web App Manifest
{
"name": "M3U8Player",
"short_name": "播放器",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#d27a0e",
"icons": [
{ "src": "/icon-192.png", "sizes": "192x192" },
{ "src": "/icon-512.png", "sizes": "512x512" }
]
}
2. Service Worker 缓存策略
const CACHE_NAME = 'video-pwa-v1';
const urlsToCache = [
'/',
'/index.html',
'/css/styles.css',
'/js/app.js'
];
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME)
.then(cache => cache.addAll(urlsToCache))
);
});
3. 视频离线播放
使用 Cache API 缓存视频片段:
// 缓存视频片段
cache.add(videoUrl);
// 使用缓存的视频
const cache = await caches.open(CACHE_NAME);
const response = await cache.match(videoUrl);
视频 PWA 注意事项
- 大视频不建议完全缓存,会占用大量存储空间
- 使用 Range 请求实现视频的部分缓存
- 实现优雅的离线降级体验
💡 存储限制:浏览器对 PWA 的存储空间有限制,iOS Safari 约 50MB,Chrome 可申请更多配额。