Service Workers in Loklak Search
Loklak search is a web application which is built on latest web technologies and is aiming to be a progressive web application. A PWA is a web application which has a rich, reliable, fast, and engaging web experience, and web API which enables us to get these are Service Workers. This blog post describes the basics of service workers and their usage in the Loklak Search application to act as a Network Proxy to and the programmatical cache controller for static resources.
What are Service Workers?
In the very formal definition, Matt Gaunt describes service workers to be a script that the browser runs in the background, and help us enable all the modern web features. Most these features include intercepting network requests and caching and responding from the cache in a more programmatical way, and independent from native browser based caching. To register a service worker in the application is a really simple task, there is just one thing which should be kept in mind, that service workers need the HTTPS connection, to work, and this is the web standard made around the secure protocol. To register a service worker
if ('serviceWorker' in navigator) { window.addEventListener('load', function() { navigator.serviceWorker.register('/sw.js').then(function(registration) { // Registration was successful console.log('ServiceWorker registration successful with scope: ', registration.scope); }, function(err) { // registration failed :( console.log('ServiceWorker registration failed: ', err); }); }); }
This piece of javascript, if the browser supports, registers the service worker defined by sw.js. The service worker then goes through its lifecycle, and gets installed and then it takes control of the page it gets registered with.
What does service workers solve in Loklak Search?
In loklak search, service workers currently work as a, network proxy to work as a caching mechanism for static resources. These static resources include the all the bundled js files and images. These bundled chunks are cached in the service workers cache and are responded with from the cache when requested. The chunking of assets have an advantage in this caching strategy, as the cache misses only happen for the chunks which are modified, and the parts of the application which are unmodified are served from the cache making it possible for lesser download of assets to be served.
Service workers and Angular
As the loklak search is an angular application we, have used the @angular/service-worker library to implement the service workers. This is simple to integrate library and works with the, CLI, there are two steps to enable this, first is to download the Service Worker package
npm install --save @angular/service-worker
And the second step is to enable the service worker flag in .angular-cli.json
"apps": [ { // Other Configurations serviceWorker: true } ]
Now when we generate the production build from the CLI, along with all the application chunks we get, The three files related to the service workers as well
- sw-register.bundle.js : This is a simple register script which is included in the index page to register the service worker.
- worker-basic.js : This is the main service worker logic, which handles all the caching strategies.
- ngsw-manifest.json : This is a simple manifest which contains the all the assets to be cached along with their version hashes for cache busting.
Future enhancements in Loklak Search with Service Workers
The service workers are fresh in loklak search and are currently just used for caching the static resources. We will be using service workers for more sophisticated caching strategies like
- Dynamically caching the results and resources received from the API
- Using IndexedDB interface with service workers for storing the API response in a structured manner.
- Using service workers, and app manifest to provide the app like experience to the user.
Resources and Links
- Google Web Dev reference PWA
- Google Web Dev reference service workers
- Angular mobile project
- Service Workers Explainer gist
- Service Workers the standard W3C documentation