zoukankan      html  css  js  c++  java
  • js缓存问题,修改js后代码不生效

    问题描述

      最近在上线新版本项目的时候,发现有的用户的操作还是调用的老版本JS里面的内容,这样就造成原来新的JS里面加上的限制不能限制用户的操作,从而导致用户可以重复操作。

    问题产生原因

      如果在用户之前已经访问过系统,那么浏览器中会缓存该系统的CSS、JS,这些CSS、JS缓存未过期之前,浏览器只会从缓存中读取CSS和JS,如果在服务器上修改了css和js,那么这些修改在用户的浏览器中是不会有变化的。

    解决方案

    解决方式一:

    用户按Ctrl + F5强制刷新页面或者手动清空了浏览器的缓存。此时浏览器会重新向服务器获取CSS和JS文件,新的文件便会生效。

    解决方式二:

           但是用户量过大的时候总不能让每个用户一一清理缓存吧,于是便从代码的角度着手解决这个问题。在js后面添加版本号,让浏览器把这个JS文件当做新的文件重新向服务器获取资源。

    加版本号之前:

    <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>
  • 相关阅读:
    Unicode下CString(wchar_t)转换为 char*
    安装程序制作(转)
    STL头文件
    杭电2043 请大神帮我看看哪错了?谢谢了!
    杭电2046
    杭电2044
    实现winform中的treeview控件部分节点显示checkbox,部分节点不显示checkbox的功能
    实现将sqlserver2000的多张表导出到access,并压缩,并导入压缩的access文件到sqlserver2000
    从Excel中指定的sheet名称或索引读取数据到DataTable,以便用户更改sheet名称后仍能读取数据
    combobox控件实现多列显示
  • 原文地址:https://www.cnblogs.com/cocoxu1992/p/10670011.html
Copyright © 2011-2022 走看看