Progressive Web App
Reliable
Fast
Engagement
Declaration
Manifest
{
"name": "NTCH Map",
"icons": [{
"src": "/app-icon.png",
"sizes": "1024x1024",
"type": "image/png"
}],
"start_url": "/index.html?source=pwa",
"display": "standalone",
"background_color": "#3F312C"
}
App Icon & LaunchScreen
<!-- RWD -->
<meta name='viewport' content='initial-scale=1, maximum-scale=1' />
<!-- PWA Manifest -->
<link ref="manifest" href="manifest.json" />
<!-- iOS Only -->
<meta name="apple-mobile-web-app-capable" content="yes" />
<link rel="apple-touch-icon" sizes="1024x1024" href="app-icon.png" />
<link rel="apple-touch-startup-image" sizes="1125x2436" href="launch-screen-iphonex.png" />
Service Worker
Install
Activate
Fetch Data
Hijack Fetch Request
HTTPS Only
Isolate Scope (thread)
Event-based API
Cache Policy
Workbox
Cache tool from Google
Register Service Worker
<!-- Before Request -->
<script>
if (navigator.serviceWorker) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/sw.js');
});
}
</script>
Set Cache Policy
importScripts('https://storage.googleapis.com/workbox-cdn/releases/3.6.1/workbox-sw.js');
if (workbox) {
workbox.routing.registerRoute(
/bundle\.js/,
workbox.strategies.networkFirst(),
);
workbox.routing.registerRoute(
/.*mapbox-gl\.(css|js)/,
workbox.strategies.cacheFirst(),
);
}
Working with Webpack
rules: [{
test: /\.jsx?$/,
use: [
'babel-loader',
],
include: [
__dirname,
],
}, {
test: /\.(jpe?g|png|gif|svg)$/i,
use: [{
loader: 'file-loader',
options: {
hash: 'sha512',
digest: 'hex',
name: 'map_[hash].[ext]', // Prefix Filename
},
}],
include: /static/,
}],
Add Cache Icons
workbox.routing.registerRoute(
/map.*\.png/,
workbox.strategies.cacheFirst(),
);
Demo
Progressive Web App
By Chia Yu Pai
Progressive Web App
- 335