問題描述javascript
最近在上線新版本項目的時候,發現有的用戶的操做仍是調用的老版本JS裏面的內容,這樣就形成原來新的JS裏面加上的限制不能限制用戶的操做,從而致使用戶能夠重複操做。css
問題產生緣由html
若是在用戶以前已經訪問過系統,那麼瀏覽器中會緩存該系統的CSS、JS,這些CSS、JS緩存未過時以前,瀏覽器只會從緩存中讀取CSS和JS,若是在服務器上修改了css和js,那麼這些修改在用戶的瀏覽器中是不會有變化的。java
解決方案瀏覽器
解決方式一:緩存
用戶按Ctrl + F5強制刷新頁面或者手動清空了瀏覽器的緩存。此時瀏覽器會從新向服務器獲取CSS和JS文件,新的文件便會生效。服務器
解決方式二:dom
可是用戶量過大的時候總不能讓每一個用戶一一清理緩存吧,因而便從代碼的角度着手解決這個問題。在js後面添加版本號,讓瀏覽器把這個JS文件當作新的文件從新向服務器獲取資源。函數
加版本號以前:spa
<script type="text/javascript" th:src="@{/js/test/index.js}"></script>
加版本號以後:
<script type="text/javascript" th:src="@{/js/test/index.js?v=1.0}"></script>
此時問題解決,CSS與上相似。
問題延伸:
可是JS文件或CSS過多的狀況下須要一個一個的去修改版本號,會花費大量的時間,這個時候須要怎麼操做呢???
<script type="text/javascript" src="/js/common.js?t={{date("Y-m-d")}}" ></script> 使用日期,從新請求服務器。
<script type="text/javascript" src="/js/common.js?t={{time()}}" ></script> 使用時間戳
<script type="text/javascript" >loadJs("http://localhost:8081/static/html/convention.js.js?timestamp="+Math.random(),null);</script>
<!-- 須要引入Date日期函數類-> <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" import="java.util.*"%> <script type="text/javascript" src="<%=request.getContextPath() %>/js/sign/contactList.js?v=<%=new Date().getTime() %>" charset="UTF-8"></script>