《Progressive Web Apps》读书笔记八
第八章 构建更富弹性的应用
8.1 现代网站所面临的网络问题
lie-fi
即使信号满格也无法下载任何东西。
单点故障(SPOF)
浏览器加载过程中,当解析器遇到脚本或 CSS 文件时,必须停止并执行文件,然后才能继续解析 HTML。若网页中引用的第三方网站出现加载时间过长或者宕机,那么网页应用将会收到影响。但第三方应用完全不受控制,可以用 Service Worker 来弹性处理这些问题。
8.2 Service Worker 的营救
在网速慢时返回 408 响应
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| function timeout(delay) { return new Promise((resolve, reject) => { setTimeout(function () { resolve(new Response('', { status: 408, statusText: 'Request timed out.' })) }, delay) }) }
self.addEventListener('fetch', function (event) { if (/googleapis/.test(event.request.url)) { event.respondWith(Promise.race([timeout(3000), fetch(event.request.url)])) } else { event.respondWith(fetch(event.request)) } })
|
8.3 使用 Workbox
使用 Workbox 处理网络超时
1 2 3 4 5 6 7 8 9
| importScripts('workbox-sw.prod.js')
const workboxSW = new self.WorkboxSW()
workboxSW.router.registerRoute('https://fonts.googleapis.com/(.*)', workboxSW.strategies.cacheFirst({ cacheName: 'googleapis', networkTimeoutSeconds: 4 }))
|