PWA & Edge•
Zero-Config Offline PWA Caching Patterns for Static Sites
How to combine Stale-While-Revalidate service workers with Astro static site generation for sub-10ms offline page loads.
Static websites are naturally offline-friendly, but standard browsers still fail to load cached pages when a mobile network drops. Adding a lightweight service worker enables instant offline reading for documentation, blogs, and portfolio profiles.
Stale-While-Revalidate Strategy
For HTML documents and static assets, Stale-While-Revalidate serves cached content immediately from Cache Storage while fetching fresh updates in the background:
// public/sw.js
const CACHE_NAME = 'sahillangoo-v1';
const ASSETS_TO_CACHE = [
'/',
'/projects/',
'/blog/',
'/notes/',
'/resume/',
'/colophon/',
'/favicon.svg',
];
self.addEventListener('install', (e) => {
e.waitUntil(caches.open(CACHE_NAME).then((cache) => cache.addAll(ASSETS_TO_CACHE)));
self.skipWaiting();
});
self.addEventListener('fetch', (event) => {
if (event.request.method !== 'GET') return;
event.respondWith(
caches.open(CACHE_NAME).then(async (cache) => {
const cachedResponse = await cache.match(event.request);
const networkFetch = fetch(event.request)
.then((networkResponse) => {
if (networkResponse.status === 200) {
cache.put(event.request, networkResponse.clone());
}
return networkResponse;
})
.catch(() => cachedResponse);
return cachedResponse || networkFetch;
})
);
});
Registration in Astro
<script is:inline>
if ('serviceWorker' in navigator && window.location.protocol === 'https:') {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/sw.js');
});
}
</script>