Audit and fix accessibility issues across the portfolio to ensure WCAG 2.1 AA compliance.
中文简介正在准备中。当前显示原文说明。
Service worker management, offline support, cache strategies, and SW debugging.
中文简介正在准备中。当前显示原文说明。
实测评分 未实测
查看安装方法安装前可以查看交给 AI 代理的指令内容。
Note: This portfolio has a hand-written service worker (public/sw.js) but is NOT a PWA. There is no manifest.json.
File: public/sw.js
Current version: v4
Cache strategy by path:
| Path pattern | Strategy | Notes |
|---|---|---|
_next/static/ | Network-first | Prevents stale chunks |
_next/data/ | Network-first | Fresh page data |
/api/ | Network-only | Never cache API responses |
fonts/ | Cache-first | Static, immutable assets |
images/ | Cache-first | Static images |
| Other | Stale-while-revalidate | Balanced approach |
Chrome DevTools:
Ctrl+Shift+R (Windows) / Cmd+Shift+R (Mac)Via code (for users):
The service worker includes a version check. When the version changes, the old cache is automatically cleared in the install event handler.
When making changes to public/sw.js:
CACHE_VERSION constant:const CACHE_VERSION = 'v5'; // was v4
Add to the urlsToCache array in the install handler:
const urlsToCache = [
'/',
'/offline',
'/fonts/inter-var.woff2',
'/new-static-asset.js',
];
Change cache strategy for a path:
In the fetch handler, add a new case:
if (url.pathname.startsWith('/new-path/')) {
// Network-first strategy
event.respondWith(
fetch(event.request)
.then(response => {
const responseClone = response.clone();
caches.open(CACHE_NAME).then(cache => {
cache.put(event.request, responseClone);
});
return response;
})
.catch(() => caches.match(event.request))
);
return;
}
Cache-first (static assets):
Request → Cache hit? → Yes → Return cached
→ No → Fetch → Cache → Return
Best for: fonts, images, immutable assets
Network-first (API, dynamic):
Request → Fetch → OK? → Return response → Cache
→ Fail? → Cache hit? → Return cached
→ No? → Offline fallback
Best for: API calls, dynamic pages, _next/static/
Stale-while-revalidate:
Request → Cache hit? → Yes → Return cached + fetch in background
→ No → Fetch → Cache → Return
Best for: pages, HTML, semi-static content
Current offline page: /offline (if configured)
To add offline support for a route:
urlsToCache in the install handlerProblem: Stale content after deployment
# 1. Check if SW is registered
# DevTools → Application → Service Workers → "Active" state
# 2. Check cache contents
# DevTools → Application → Cache Storage → expand caches
# 3. Force update
# DevTools → Service Workers → "Update on reload" checkbox → Reload
Problem: Page shows old version
CACHE_VERSION was incremented in sw.jsProblem: Assets not loading
Problem: SW not registering
public/sw.js existsService workers add minimal overhead:
Keep the SW lean:
network-first for frequently updated contentCACHE_VERSION after changes/api/)# Check SW status
# DevTools → Application → Service Workers
# Check caches
# DevTools → Application → Cache Storage
# Force SW update
# DevTools → Service Workers → "Update on reload" → Reload
# Clear everything
# DevTools → Application → Storage → "Clear site data"
还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
Audit and fix accessibility issues across the portfolio to ensure WCAG 2.1 AA compliance.
中文简介正在准备中。当前显示原文说明。
Creates a new blog post document in the Sanity studio. Use when the user wants to write a blog post, publish an article, or schedule a future post.
中文简介正在准备中。当前显示原文说明。
Creates a new certification document in the Sanity studio. Use when the user wants to add a credential, certificate, or professional accreditation to the Certifications collection.
中文简介正在准备中。当前显示原文说明。
Adds a new skill MD file to the studio's skills collection. Use when the user wants to author a new step-by-step recipe for the studio's in-app Skills tool or the .agents mirror.
中文简介正在准备中。当前显示原文说明。
Creates a new project document in the Sanity studio. Use when the user wants to add a new portfolio project, a case study, or a work sample to the Projects collection.
中文简介正在准备中。当前显示原文说明。
Creates a new experience document in the Sanity studio. Use when the user wants to add a job, role, internship, or work history entry to the Experience collection.
中文简介正在准备中。当前显示原文说明。