Front-end technology is approaching desktop technology, and one of the most important ones is service workers, which make it possible for HTML Apps to work offline. This article will illustrate this technology with a simple case code. The tools I use:
1. The browser version is chrome 55
2. Server system: Node 5.0
We need to prepare 3 files:
touch index.html b.html sw.js
The content of the file index.html is:
<script> if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js'); } </script>
It registers a service worker, the file name is sw.js, a JavaScript code file. So the really key file is sw.js, its content is:
const cacheName = 'v1::static'; self.addEventListener('install', e => { e.waitUntil( caches.open(cacheName).then(cache => { return cache.addAll([ '/', ]).then(() => self.skipWaiting()); }) ); }); self.addEventListener('fetch', event => { event.respondWith( caches.open(cacheName).then(cache => { return cache.match(event.request).then(res => { return res || fetch(event.request) }); }) ); });
As an event, install will be called when ServiceWorker is loaded for the first time. Here you can do some initialization work. Typical The job is to load files that will be needed offline into the cache. Here we specify "/" so any content will be cached.
The second event is fetch, which will be called when accessing remote resources. A match can be made here. If there is a resource in the cache, the resource in the cache will be returned, otherwise it will be fetched remotely.
The third file b.html is a file to demonstrate the offline effect. The content is:
<h1>serviceWorker B</h1>
Although you can install the http server and execute it in the current path:
npm i http-server http-server
Visit:
http://localhost:8080/index.html
and
http://localhost:8080/b.html
Then, close the http server and visit
http://localhost:8080/b.html
again, and you can actually access~, and this is the effect of offline implementation.
Well, if you want to check the running status of service workers, you can also use the following url:
chrome://inspect/#service-workers
You can see more details like this:
chrome://serviceworker-internals/
You can see it here Start, cancel registration and other operations.
You can check its implementation, but it’s not that optimistic:
http://caniuse.com/#feat=serviceworkers