版本校驗方案

版本校驗方案


主要場景:

  • 主要應(yīng)對微信內(nèi)網(wǎng)頁緩存嚴(yán)重問題(加時間戳的派阱,需要手動刷新一次。未加時間戳的揩环,大概需要刷新三次搔弄。)
  • 版本更新后,客戶端再次打開丰滑,默認(rèn)調(diào)用緩存顾犹,需要手動刷新
  • 應(yīng)對部分活動項目,頻繁發(fā)版導(dǎo)致的緩存不更新問題
  • 應(yīng)對在線項目可能存在的褒墨,需要緊急全網(wǎng)修改的問題炫刷。[真有]

目標(biāo)

  • 版本更新后,用戶無需刷新郁妈,無感知浑玛,自動刷新緩存

方案策略

  • 在 version.json 文件中,存儲當(dāng)前版本 { "version": '1.0.1' }
  • 在 check.js 中保存當(dāng)前版本 var version = '1.0.1'
  • 在 html 頭部加載 check.js
  • check.js 請求 version.json噩咪。request('xxxx/version.json?date=' + Date.now())顾彰,version.json是靜態(tài)資源极阅,加時間戳避免使用緩存
  • check.js 請求到的 version 和 本地的不一致時,說明本地使用的是緩存涨享,則刷新緩存 location.reload(true)
  • 原生項目的話筋搏,最好也手動給改動的文件加上時間戳或者版本號

方案代碼

index.html, safe/version.json, safe/check.js 三處的版本號需保持一致

index.html

<head>
  <script src="./static/safe/check.js?version=1.0.0" type="text/javascript"></script>
</head>

safe/check.js

;(function() {
  var version = '1.0.0'
  function request(option) {
    if (String(option) !== '[object Object]') return undefined
    var xhr = new XMLHttpRequest()
    xhr.responseType = option.responseType || 'json'
    xhr.onreadystatechange = function () {
      if (xhr.readyState === 4) {
        if (xhr.status === 200) {
          if (option.success && typeof option.success === 'function') {
            option.success(xhr.response)
          }
        } else {
          if (option.error && typeof option.error === 'function') {
            option.error()
          }
        }
      }
    }
    xhr.open(option.method || 'GET', option.url, true)
    xhr.send()
  }
  var jsLoaded = document.scripts;
  var currentJs = jsLoaded[jsLoaded.length - 1].src;
  var safeUrl = currentJs.substring(0, currentJs.lastIndexOf('/')) + '/version.json?date=' + Date.now()
  request({
    method: 'GET',
    url: safeUrl,
    success: function (res) {
      if (res.version !== version) {
        location.reload(true)
      }
    },
    error: function () { }
  })
})();

safe/version.json

{
  "version": "1.0.0"
}
  • 原生項目的話,上面兩個文件就可以了

使用構(gòu)建方案

以 vue + webpack 為例

package.json, index.html, safe/version.json, safe/check.js 四處的版本號需保持一致

npm install --save-dev version-bump-prompt

package.json

"version": "1.0.0",
"scripts": {
  "tag": "bump --prompt --grep index.html static/safe/version.json static/safe/check.js"
}

運行npm run tag自動更新版本號厕隧,手動選擇版本模式

2017-12-04_140002.png


說明

  • 微信內(nèi)會對未加版本號的文件強(qiáng)制緩存拆又,reload 也無法更新,只能手動右上角刷新栏账。
  • 所以需要在safe/check.js?version=1.0.0后面加上版本號帖族。
  • HTML文件內(nèi),可能還引用了其它有版本號鏈接挡爵,例如 微信jsSDK竖般。如果版本數(shù)字吻合的話,會被同步更改茶鹃,這里要注意
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涣雕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子闭翩,更是在濱河造成了極大的恐慌挣郭,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疗韵,死亡現(xiàn)場離奇詭異兑障,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蕉汪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門流译,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人者疤,你說我怎么就攤上這事福澡。” “怎么了驹马?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵革砸,是天一觀的道長。 經(jīng)常有香客問我糯累,道長算利,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任寇蚊,我火速辦了婚禮笔时,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仗岸。我一直安慰自己允耿,他們只是感情好借笙,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著较锡,像睡著了一般业稼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚂蕴,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天低散,我揣著相機(jī)與錄音,去河邊找鬼骡楼。 笑死熔号,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鸟整。 我是一名探鬼主播引镊,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼篮条!你這毒婦竟也來了弟头?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤涉茧,失蹤者是張志新(化名)和其女友劉穎赴恨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伴栓,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡伦连,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了挣饥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片除师。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扔枫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锹安,我是刑警寧澤短荐,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站叹哭,受9級特大地震影響忍宋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜风罩,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一糠排、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧超升,春花似錦入宦、人聲如沸哺徊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽落追。三九已至,卻和暖如春涯肩,著一層夾襖步出監(jiān)牢的瞬間轿钠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工病苗, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留疗垛,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓硫朦,卻偏偏與公主長得像继谚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子阵幸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理花履,服務(wù)發(fā)現(xiàn),斷路器挚赊,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • Swift版本點擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,365評論 7 249
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件蔑鹦、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,095評論 4 62
  • 半醒半夢間夺克,已過了人生的四分之一,驚訝時間太快之余嚎朽,也感嘆至今無所作為铺纽。處在這個既年輕但又不年輕的尷尬年紀(jì),消耗著...
    bd68d292ef53閱讀 276評論 0 0
  • 我為異客 離家九月天 海棠未開 蟬鳴未止 繁星一如心中愿 想道是 天道無親 也識人心善變 離別也是日落西山 殘霞...
    鵲仙閱讀 178評論 3 4