`

引用js时如何防止缓存

阅读更多

引用js时,防止缓存

场景:

我们有个js文件,被很多网站引用.

可是有一个问题:因为改bug或者优化 这个js文件后,由于网站缓存,导致引用的网站没有更新.

怎么办呢?

又不可能要求其他网站在js文件上加上随机数或者时间戳.这个我们掌控不了.

而且加上随机数有问题:每次都得重新加载,这样会影响用户体验,而且完全没有必要每次都重新加载.

方式一:使用jsonp/ajax



 

WEB-INF/static/html/convention.js.html 的内容:

 

callback222('<script type="text/javascript" src="/static/js/convention.js?aaa=123"></script>')

 达到了目的:

 

 

可是自动给我加上了随机数:

 这样的话,每次都会真正发送请求,但是没有修改js的时候,是可以使用缓存的.

我不需要随机数.

这种方式导致没法利用缓存.

 方式二:在js脚本中动态创建脚本

在引用的网站中引入如下js:

 

<script type="text/javascript"  >
loadJs("http://localhost:8081/static/html/convention.js.js?timestamp="+Math.random(),null);
</script>

 http://localhost:8081/static/html/convention.js.js 内容如下:

 

loadJs("/static/js/convention.js?aaa=222", null);

 

 

效果:

 第二次访问就使用缓存了:

 

loadJs 就是创建JavaScript节点,实现如下:

function loadJs(url, callback) {
    var done = false;
    var script = document.createElement('script');
    script.type = 'text/javascript';//do not 'application/javascript',because Low version of the browser is not compatible
    script.language = 'javascript';
    script.charset = "utf-8";
    script.src = url;
    //script.setAttribute('src', url);
    script.onload = script.onreadystatechange = function () {
        if (!done && (!script.readyState || script.readyState == 'loaded' || script.readyState == 'complete')) {
            done = true;
            script.onload = script.onreadystatechange = null;
            if (callback) {
                console.log('load ' + url + ' success.');
                callback.call(script);
            }
        }
    };
    document.getElementsByTagName("head")[0].appendChild(script);
};

 

我们以后修改bug时,只需要修改WEB-INF/static/html/convention.js.js中的版本号即可.



 

 

webapp 也遇到了相似的问题

 

解决方法:



  

  • 大小: 324.3 KB
  • 大小: 50.9 KB
  • 大小: 10.7 KB
  • 大小: 13.1 KB
  • 大小: 13.4 KB
  • 大小: 29.6 KB
  • 大小: 41.6 KB
  • 大小: 197.4 KB
0
0
分享到:
评论
1 楼 u013810758 2017-05-12  
java中直接加Math.random()就好,<script src="static/1.9.1/jquery.js?t=<%=Math.random()%>" type="text/javascript" ></script>

相关推荐

    JavaScript缓存区分析

    JavaScript缓存区分析是Web开发中的一个重要概念,尤其是在性能优化和大数据处理方面。在这个话题中,我们将深入探讨JavaScript如何管理内存,以及如何利用缓存机制提高应用程序的运行效率。 首先,我们要理解...

    【JavaScript源代码】vue keepAlive缓存清除问题案例详解.docx

    总结来说,Vue的`&lt;keep-alive&gt;`组件在处理组件缓存时提供了很大的便利,但也带来了如何动态控制缓存的复杂性。通过结合`include`属性和Vuex,我们可以构建一个灵活且可控的缓存管理系统,确保组件的缓存状态能根据...

    页面缓存处理方案文档,解决前后端页面缓存

    2. **CSS和JS文件缓存**: 为了实现更新后自动生效,通常采用版本号或时间戳来更新文件引用。例如: ```html &lt;script src="../scripts/aa.js?v=2019XXXXX"&gt; ``` 当文件被修改时,只需更改版本号(这里用日期...

    js 禁止保存、屏蔽、缓存、页面保护

    在网页保护方面,JavaScript 提供了一些方法来限制用户的某些操作,如禁止右键菜单、防止复制、禁用缓存等。以下是一些常用的 JavaScript 代码示例及其原理: 1. `oncontextmenu="window.event.returnValue=false"`...

    JS+CSS 无刷新换肤并记录缓存

    总结来说,实现JS+CSS无刷新换肤的关键在于利用JavaScript动态修改CSS文件引用,以及利用浏览器的缓存机制减少网络请求。同时,通过本地存储记录用户的皮肤选择,确保了用户体验的连贯性。在实际项目中,还可以...

    禁止浏览器缓存当前文档内容

    2. **利用Referer请求头阻止“盗链”**:服务器可以通过检查请求的`Referer`字段来判断请求是否来自预期的源,如果不是,可以拒绝响应,防止资源被其他网站非法引用。 3. **load-on-startup标签的作用**:在Servlet...

    wabacus-4.3(修改page引用js加动态随机参数)

    该jar包修改了原wabacus4.3内部加载page引用的js的基础上,添加上一个动态随机参数(即a/b/c.js自动修改为a/b/c.js?v=xxx.xxx),是的调试js时不用每次都清缓存。

    HTML页面自动清理js、css文件的缓存(自动添加版本号)

    总的来说,自动添加版本号是解决浏览器缓存问题的有效手段,它可以确保用户始终能够获取到最新版本的CSS和JavaScript文件。通过JavaScript、服务器端语言或构建工具,开发者可以轻松地实现这一功能,从而提供更好的...

    防止文件缓存的js代码

    在提供的信息中,通过JavaScript代码实现防止文件缓存的原理是利用JavaScript代码在引用资源文件时动态生成一个唯一的查询字符串。这个查询字符串包含了当前的时间信息,具体到秒。这样,每次请求的资源链接都因为...

    加随机数引入脚本不让浏览器读取缓存

    标题中的"加随机数引入脚本不让浏览器读取缓存",是指在HTML中的`&lt;script&gt;`标签引用JavaScript文件时,通过在URL末尾添加一个随机数(通常为当前时间戳或完全随机的数字)来阻止浏览器使用已有的缓存版本。...

    弱lru高速缓存:使用LRU和弱引用以与垃圾回收协调工作的方式缓存数据的缓存

    weak-lru-cache软件包提供了功能强大的缓存,可与JS垃圾回收(GC)和最近最少使用(LRU)和最少最近使用(LFU)的过期策略协同工作,以帮助缓存高度优化的缓存数据。 它使用LRU / LFU(LRFU)到期来保留引用的数据,...

    js-leetcode题解之LRU缓存-题解.zip

    在LeetCode这个在线编程挑战平台上,有一道关于实现LRU缓存的题目,而“js_leetcode题解之LRU缓存_题解.zip”文件正是针对这道题目的JavaScript解法。 LRU缓存的主要思想是:当缓存满时,优先淘汰最近最少使用的...

    判断类的缓存大小

    ### 判断类的缓存大小 #### 概述 在Java编程语言中,类与对象之间的关系至关重要。本文将深入探讨如何通过Java内置的关键字`instanceof`以及类方法`isInstance(Object obj)`和`isAssignableFrom(Class&lt;?&gt; cls)`来...

    html实现自动清理js、css文件的缓存.docx

    每次更新资源文件时,我们需要手动清除浏览器缓存,以确保浏览器获取最新的版本。然而,这个方法需要用户积极参与,否则用户可能会继续使用旧版本的资源文件。 方法二:添加版本号 这个方法是最常用的方法。我们...

    利用 filter 机制给静态资源 url 加上时间戳,来防止js和css文件的缓存问题

    在Web应用开发中,静态资源如JavaScript(.js)文件和CSS(.css)样式表文件的缓存问题是开发者经常需要面对的一个问题。缓存可以加快页面加载速度,但是如果缓存时间设置过长,会导致用户在网站发布新的资源后无法...

    web服务器缓存静态资源,更新静态资源的规则,静态资源如css,js文件 HTTP CODE 304.zip

    在Web开发中,提高网站性能和用户体验的一个关键策略是有效地缓存静态资源,如CSS、JavaScript文件等。静态资源缓存能够减少网络延迟,减轻服务器压力,并加速页面加载时间。以下将详细介绍关于“web服务器缓存静态...

    Android WebView加载网页以及本地图片缓存问题

    3. 清理缓存:当需要清理WebView的缓存时,可以使用以下方法: ```java webView.clearCache(true); // 清除所有缓存,包括磁盘和内存 webView.clearHistory(); // 清除浏览历史 ``` 总结,Android的WebView组件提供...

    突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)

    应用缓存是HTML5离线存储的一种方式,允许开发者将静态资源(如HTML、CSS、JavaScript文件等)缓存到用户的本地,以便在网络不可用时仍能访问应用。启用应用缓存的方法是在HTML文档的`&lt;html&gt;`标签中添加`manifest`...

Global site tag (gtag.js) - Google Analytics