Ich beobachtete Steve Sanderson's NDC presentation on up-and-coming web features, und sah seine Caching-Beispiel als Hauptkandidat für eine Anwendung, die ich entwickle. Ich konnte den Code nicht finden, also habe ich ihn so gut wie möglich aus dem Youtube-Video getippt.Service-Mitarbeiter-Caching nicht Timeout als Funktion zu erkennen
Leider funktioniert es nicht in Chrome (das ist auch, was er in der Demo verwendet) Es schlägt mit Uncaught TypeError: fetch(...).then(...).timeout is not a function at self.addEventListener.event
.
ich durch Steve's Github surften, und fand keine Spur davon, noch ich etwas auf der NDC-Konferenz Seite
//inspiration:
// https://www.youtube.com/watch?v=MiLAE6HMr10
//self.importScripts('scripts/util.js');
console.log('Service Worker script running');
self.addEventListener('install', event => {
console.log('WORKER: installing');
const urlsToCache = ['/ServiceWorkerExperiment/', '/ServiceWorkerExperiment/scripts/page.js'];
caches.delete('mycache');
event.waitUntil(
caches.open('mycache')
.then(cache => cache.addAll(urlsToCache))
.then(_ => self.skipWaiting())
);
});
self.addEventListener('fetch', event => {
console.log(`WORKER: Intercepted request for ${event.request.url}`);
if (event.request.method !== 'GET') {
return;
}
event.respondWith(
fetch(event.request)
.then(networkResponse => {
console.log(`WORKER: Updating cached data for ${event.request.url}`);
var responseClone = networkResponse.clone();
caches.open('mycache').then(cache => cache.put(event.request, responseClone));
return networkResponse;
})
//if network fails or is too slow, return cached data
//reference for this code: https://youtu.be/MiLAE6HMr10?t=1003
.timeout(200)
.catch(_ => {
console.log(`WORKER: Serving ${event.request.url} from CACHE`);
return caches.match(event.request);
})
);
});
Soweit ich die holen lesen() Dokumentation, gibt es keine Timeout-Funktion finden konnte, also meine Annahme ist, dass die Timeout-Funktion in der util.js hinzugefügt wird, die nie in der Präsentation gezeigt wird ... kann jemand dies bestätigen? und hat jemand eine Vorstellung davon, wie dies umgesetzt wird?
Ich werde das ausprobieren. Vielen Dank – JoSSte