Open lishengzxc opened 6 years ago
self.onfetch = (e) => { const cached = caches.match(e.request) const fallback = caches.match('offline.html') const fetched = fetch(`${e.request.url}?${Date.now()}`) e.respondWith( cached .then(res => res || fetched) .catch(_ => fallback) ) }
self.onfetch = (e) => { const cached = caches.match(e.request) const fallback = caches.match('offline.html') const fetched = fetch(`${e.request.url}?${Date.now()}`) e.respondWith( Promise.race([fetched.catch(_ => cached), cached]) .then(resp => resp || fetched) .catch(_ => fallback) ) }
// Stale-W-Revalidate & Fallback self.onfetch = (e) => { const cached = caches.match(e.request) const fallback = caches.match('offline.html') const fetched = fetch(`${e.request.url}?${Date.now()}`) const fetchedCopy = fetched.then(_ => _.clone()) e.respondWith( cached .then(res => res || fetched) .catch(_ => fallback) ) e.waitUntil( Promise.all([fetchedCopy, caches.open('runtime')]) .then(([resp, cache]) => resp.ok && cache.put(e.request, resp)) .catch(_ => {/* swallow */}) ) }
// Fastest-W-Revalidate & Fallback self.onfetch = (e) => { const cached = caches.match(e.request) const fallback = caches.match('offline.html') const fetched = fetch(`${e.request.url}?${Date.now()}`) const fetchedCopy = fetched.then(_ => _.clone()) e.respondWith( Promise.race([fetched.catch(_ => cached), cached]) .then(resp => resp || fetched) .catch(_ => fallback) ) e.waitUntil( Promise.all([fetchedCopy, caches.open('runtime')]) .then(([resp, cache]) => resp.ok && cache.put(e.request, resp)) .catch(_ => {/* swallow */}) ) }
Cache First & Fallback
Cache and Network Race (Fastest) & Fallback
Stale (or Fastest) While Revalidate
Cache then Network (from Pages)
Reference