前言:項目更新後JS,CSS文件常出現緩存問題,代碼已更改,但在有些客戶端不會當即生效javascript
解決方案:加時間戳css
可是加時間戳也有不一樣的方案,手動加太麻煩,不過能夠快速處理問題。html
jsp頁面:java
<% String dateTime = org.apache.commons.lang.time.DateFormatUtils.format(java.util.Calendar.getInstance(), "yyyyMMddHHmmss"); %> <script type="text/javascript" src="/js/xx.js?v=<%=dateTime%>"></script>
<link rel="stylesheet" type="text/css" href="/css/layout.css?v=<%=System.currentTimeMillis() %>">
ftl頁面(FreeMarker模板文件):apache
<script type="text/javascript" src="/js/xx.js?v=${.now}"></script>
上面兩種方法也有問題,在代碼沒有更新的狀況下,每次用戶訪問頁面也都要從新拉取靜態文件。並且html頁面是沒有上面兩種寫法的。緩存
還有一種方法是訪問後臺路由時返回時間戳。侵入性太強,並且一樣存在上面的問題。jsp
一種較爲通用的寫法:測試
<script>document.write("<script type='text/javascript' src='/js/xx.js?v=" + Date.now() + "'><\/script>");</script>
控制版本號:TODOui
頁面請求頭加禁止緩存,我測試是沒什麼用,也在這裏記錄一下:spa
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" />
參考博客:
html裏script標籤src自動加上時間戳,下降緩存影響 - lllo3o的博客 - CSDN博客
https://blog.csdn.net/lllo3o/article/details/78292663
HTML頁面自動清理js、css文件的緩存(自動添加版本號) - sinat_29740819的博客 - CSDN博客
https://blog.csdn.net/sinat_29740819/article/details/72875811