博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Service Worker 缓存文件处理
阅读量:4709 次
发布时间:2019-06-10

本文共 1021 字,大约阅读时间需要 3 分钟。

交代背景

前段时间升级了一波Google Chrome,发现我的JulyNovel站点Ctrl+F5也刷新不了,后来发现是新的Chrome已经支持Service Worker,而我的JulyNovel也满足https这个硬性条件。

之前加载过的css和js都被缓存了。
所以这里是有点小问题的,毕竟我服务器更新了,你service worker 没给我更新缓存,就说不过去了。

生命周期

特地跑到去看了下究竟是怎么运转的。

Service Worker生命周期的意义

1.实现离线优先(这个不谈,没网也能搞事?这妥妥的Native的能力啊)

2.允许新服务工作线程自行做好运行准备,无需中断当前的服务工作线程。(准备替换旧的service woker)
3.确保整个过程中作用域页面由同一个服务工作线程(或者没有服务工作线程)控制。
4.确保每次只运行网站的一个版本。

install

根据我的理解,这个环节只在第一次打开网站时加载,一系列操作保证其原子性(要么可用,要么废弃)

Activate

service worker被激活,某些请求就会变成 from ServiceWorker

更新service worker

这里就是解决问题的关键了。

首先,会触发更新的情况如下

1.导航到一个作用域内的页面。
2.更新 push 和 sync 等功能事件,除非在前 24 小时内进行了更新检查。
3.调用 .register(),仅在ServiceWorker网址已发生变化时。
4.在获取更新时遵循(长达 24 小时)服务工作线程脚本上的缓存标头。 我们将创建此选择加入行为,因为它可以发现问题。 在您的服务工作线程脚本上,您可能需要 max-age 为 0。
更新流程
1.install
装载新的工作线程(根据我的理解,就是把css和js换个版本号,则会触发install的事件)
2.waiting
等待更新动作被触发
3.Activate
新的serviceworker替换老的
4.skipWaiting
跳过waiting
5.手动更新

navigator.serviceWorker.register('/sw.js').then(reg => {  // sometime later…  reg.update();});

转载于:https://www.cnblogs.com/jiajin/p/8586758.html

你可能感兴趣的文章
python时间模块和random模块
查看>>
John Deere Service Advisor EDL V2 Diagnostic Kit
查看>>
一、设计模式简介
查看>>
Android 多线程 打地鼠游戏
查看>>
ORM关联表模型
查看>>
sgu 138
查看>>
uva 11627
查看>>
让Java swing 中的JTextArea换行
查看>>
正则表达式概念详解
查看>>
Oracle 之 保留两位小数
查看>>
Kruskal重构树学习笔记
查看>>
JS-商品图片放大器
查看>>
json_decode 与 json_encode 的区别
查看>>
XML(四)-命名空间
查看>>
java post json sample
查看>>
activity_note
查看>>
Hadoop 学习
查看>>
Leetcode-957 Prison Cells After N Days(N 天后的牢房)
查看>>
java的运算符
查看>>
27. Remove Element
查看>>