核心价值使用 `app/manifest.ts` 输出站点清单,配合 SW 提供离线与安装体验。对缓存策略进行治理,确保更新与一致性。Manifest// app/manifest.ts
export default function manifest() {
return {
name: 'App',
short_name: 'App',
start_url: '/',
display: 'standalone',
background_color: '#ffffff',
theme_color: '#0ea5e9',
icons: [
{ src: '/icons/icon-192.png', sizes: '192x192', type: 'image/png' },
{ src: '/icons/icon-512.png', sizes: '512x512', type: 'image/png' },
],
}
}
SW 注册// app/sw-register.tsx
'use client'
import { useEffect } from 'react'
export default function SWRegister() {
useEffect(() => {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js')
}
}, [])
return null
}
// app/layout.tsx
import SWRegister from './sw-register'
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html>
<body>
{children}
<SWRegister />
</body>
</html>
)
}
基础 SW// public/sw.js
self.addEventListener('install', (event) => {
self.skipWaiting()
})
self.addEventListener('activate', (event) => {
clients.claim()
})
self.addEventListener('fetch', (event) => {
const req = event.request
if (req.method !== 'GET') return
event.respondWith(fetch(req).catch(() => caches.match(req)))
})
治理建议对动态 API 使用网络优先或 `no-store`,避免缓存副本导致数据陈旧。对静态资源采用指纹文件并长缓存;更新 SW 时使用版本管理与主动更新提示。结论Manifest 与 SW 的组合可提供安装与离线能力。合理的缓存与更新治理确保体验稳定且可控。

发表评论 取消回复