動態生成js資料Response.Expires=1440竟然無效?
阿新 • • 發佈:2018-12-09
專案當中有一些資料,比如多語言翻譯,要求做語言包,起初當然是做成i18n.js檔案,但是每個階段版本更新都會增加一些key,那麼釋出的時候只能給<script>的src增加?20180913版本號,令客戶端載入新的js。
這麼做其實很不方便,平時釋出可能忘記更新母版的script版本號。
現在這裡有比較一勞永逸的方式:
1、編寫Controller,比如
public class LangController : Controller { public ActionResult Js(string langType) {var data = Get你的資料來源(langType); Response.Write("var lang = "data);
Response.ContentType = "application/x-javascript"; Response.Expires = 1440;
}
}
2、修改你的引用
<script src="/lang/js"></script>
ok,你的js資料來源在客戶端將快取1天,確保第2天能取新的(要是覺得不夠可以改成1小時、6小時),確保晚間你的釋出,使用者第二天不會用舊的js。
測試:
Webkit核心,訪問,跳轉一次URL,顯示form cache,確定不會短時間內重複載入。
IE11測試,首次訪問
跳轉URL,納尼!怎麼還是重新載入。
經過一輪百度、Bing、谷歌之後,消耗2小時除錯時間…
增加程式碼
Response.Write("document.write('" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "');");
關掉IE的F12
IE11測試,首次訪問
跳轉URL,OK有效。
原因,IE11如果開著F12,會忽略Expires限制,將為你訪問伺服器獲取新資源。
虛驚一場,是不是浪費表情了