Closed dragon-fish closed 2 years ago
jsDelivr对于静态资源的缓存规则不明,刷新间隔大约为24小时,刷新时间未知,而且其采用多层缓存以及多家服务商,位于不同地区的用户接收到的数据缓存也不尽相同
这导致短时间推出多个补丁后,生产环境用户体验不一致,难以控制。
通过 jsDelivr Data API 请求最新版本号后即可直接加载最新版本,不会产生缓存问题。
但是每次打开新标签页都检查版本会增加流量,减慢加载速度,这不符合IPE的设计理念,因此还是需要制定一个本地缓存方案,不过这个方案是时间间隔更短且人为可控的,例如可以通过URL参数控制立即检查更新。
计算当前时间戳与本地缓存文件时间戳的差值,大于0且小于[缓存时间]则表示无需检查更新,否则需要检查更新。
缓存时间单位为毫秒,预定是4小时,即4 * 60 * 60 * 1000
4 * 60 * 60 * 1000
{ "latest": "// 本地运行的版本", "cache": "// 最后一次同步版本号的时间戳" }
$.getJSON('https://data.jsdelivr.com/v1/package/npm/mediawiki-inpageedit').then( data => console.log(data.tags.latest), err => console.error(err) );
方案搁置
https://data.jsdelivr.com/v1/ 本身也有24小时缓存
现状
jsDelivr对于静态资源的缓存规则不明,刷新间隔大约为24小时,刷新时间未知,而且其采用多层缓存以及多家服务商,位于不同地区的用户接收到的数据缓存也不尽相同
这导致短时间推出多个补丁后,生产环境用户体验不一致,难以控制。
可行方案
通过 jsDelivr Data API 请求最新版本号后即可直接加载最新版本,不会产生缓存问题。
但是每次打开新标签页都检查版本会增加流量,减慢加载速度,这不符合IPE的设计理念,因此还是需要制定一个本地缓存方案,不过这个方案是时间间隔更短且人为可控的,例如可以通过URL参数控制立即检查更新。
判断是否检查更新
计算当前时间戳与本地缓存文件时间戳的差值,大于0且小于[缓存时间]则表示无需检查更新,否则需要检查更新。
缓存时间单位为毫秒,预定是4小时,即
4 * 60 * 60 * 1000
本地缓存文件数据结构
检查版本更新