inpageedit / inpageedit-v2

A powerful frontend JavaScript Plugin for MediaWiki written with jQuery
https://www.ipe.wiki
GNU General Public License v3.0
47 stars 13 forks source link

[TODO] 关于解决CDN缓存问题的方案 #100

Closed dragon-fish closed 2 years ago

dragon-fish commented 4 years ago

现状

jsDelivr对于静态资源的缓存规则不明,刷新间隔大约为24小时,刷新时间未知,而且其采用多层缓存以及多家服务商,位于不同地区的用户接收到的数据缓存也不尽相同

这导致短时间推出多个补丁后,生产环境用户体验不一致,难以控制。

可行方案

通过 jsDelivr Data API 请求最新版本号后即可直接加载最新版本,不会产生缓存问题。

但是每次打开新标签页都检查版本会增加流量,减慢加载速度,这不符合IPE的设计理念,因此还是需要制定一个本地缓存方案,不过这个方案是时间间隔更短且人为可控的,例如可以通过URL参数控制立即检查更新。

判断是否检查更新

计算当前时间戳与本地缓存文件时间戳的差值,大于0且小于[缓存时间]则表示无需检查更新,否则需要检查更新。

缓存时间单位为毫秒,预定是4小时,即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)
);
dragon-fish commented 4 years ago

方案搁置

https://data.jsdelivr.com/v1/ 本身也有24小时缓存