注册空脚本1
撰写时间:2024-12-29
修订时间:2024-12-30
何为注册
所谓注册,是指在客户端浏览器的缓存区域建立起一种标识,当客户端访问服务器中特定路径的资源时,将优先使用缓存区中已缓存的内容。
首先,在客户端浏览器中,只要是指向同一个服务器路径的注册,均属于同一个ServiceWorkerRegistration。而同一个ServiceWorkerRegistration下面,可以有多个ServiceWorkers。
其次,registration.installing, registration.waiting, registration.active这3个属性,所返回的正是位于同一路径下、不同状态的各个ServiceWorker。
第三,尽管可以有多个ServiceWorkers,但任何时候,均只有一个ServiceWorker处于激活状态,其state属性值为activated
。而其他的ServiceWorkers,要么处于正安装状态,要么处于等待状态。
第四,如果之前有已激活的ServiceWorker,则刚注册的ServiceWorker会处于等待状态,直至使用之前服务的所有客户端都关闭了相应网页后,处于等待状态的ServiceWorker才会自动转为激活状态。
第五,ServiceWorker的scriptURL所指定的.js文件,将由客户端自动下载并保存至客户端电脑,客户端只会运行客户端电脑中的复本。这样,在客户端关闭网页之前,即使服务器中已删除该文件,客户端仍可使用复本所提供的服务。但如果脚本文件名相同,且服务器端的脚本内容及客户端复本内容不同,则会自动触发相应的update事件。
第六,对于要添加的脚本,是否安装,则根据队列中不同状态的脚本名称来决定:
- 如果队列为空,则直接安装。
- 如果队列中没有
waiting
的脚本文件,只有active
的脚本文件,如果两者文件名相同,不予安装;文件名不同,予以安装。 - 如果队列中有
waiting
的脚本文件,如果两者文件名相同,不予安装;文件名不同,予以安装。此时不考虑active
的脚本文件名称。
第七,如果队列中有正在等待的脚本,则当所有客户端都不再使用正在激活的脚本时(例如,访问没有任何Service Workers代码的概述),当前激活的脚本将被卸载,而等待的脚本转为激活。
上面代码将使客户端记住,在向服务器请求当前路径下的资源时,将运行当前激活的ServiceWorker的scriptURL所指定的.js文件,由其负责提供缓存的网页内容。
本页面的所注册的脚本文件empty-caching-1.js,内容为空,本节中只注重考查注册时各个ServiceWorkers的状态。
