引用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 也遇到了相似的问题
解决方法:
相关推荐
JavaScript缓存区分析是Web开发中的一个重要概念,尤其是在性能优化和大数据处理方面。在这个话题中,我们将深入探讨JavaScript如何管理内存,以及如何利用缓存机制提高应用程序的运行效率。 首先,我们要理解...
总结来说,Vue的`<keep-alive>`组件在处理组件缓存时提供了很大的便利,但也带来了如何动态控制缓存的复杂性。通过结合`include`属性和Vuex,我们可以构建一个灵活且可控的缓存管理系统,确保组件的缓存状态能根据...
2. **CSS和JS文件缓存**: 为了实现更新后自动生效,通常采用版本号或时间戳来更新文件引用。例如: ```html <script src="../scripts/aa.js?v=2019XXXXX"> ``` 当文件被修改时,只需更改版本号(这里用日期...
在网页保护方面,JavaScript 提供了一些方法来限制用户的某些操作,如禁止右键菜单、防止复制、禁用缓存等。以下是一些常用的 JavaScript 代码示例及其原理: 1. `oncontextmenu="window.event.returnValue=false"`...
总结来说,实现JS+CSS无刷新换肤的关键在于利用JavaScript动态修改CSS文件引用,以及利用浏览器的缓存机制减少网络请求。同时,通过本地存储记录用户的皮肤选择,确保了用户体验的连贯性。在实际项目中,还可以...
2. **利用Referer请求头阻止“盗链”**:服务器可以通过检查请求的`Referer`字段来判断请求是否来自预期的源,如果不是,可以拒绝响应,防止资源被其他网站非法引用。 3. **load-on-startup标签的作用**:在Servlet...
该jar包修改了原wabacus4.3内部加载page引用的js的基础上,添加上一个动态随机参数(即a/b/c.js自动修改为a/b/c.js?v=xxx.xxx),是的调试js时不用每次都清缓存。
总的来说,自动添加版本号是解决浏览器缓存问题的有效手段,它可以确保用户始终能够获取到最新版本的CSS和JavaScript文件。通过JavaScript、服务器端语言或构建工具,开发者可以轻松地实现这一功能,从而提供更好的...
在提供的信息中,通过JavaScript代码实现防止文件缓存的原理是利用JavaScript代码在引用资源文件时动态生成一个唯一的查询字符串。这个查询字符串包含了当前的时间信息,具体到秒。这样,每次请求的资源链接都因为...
标题中的"加随机数引入脚本不让浏览器读取缓存",是指在HTML中的`<script>`标签引用JavaScript文件时,通过在URL末尾添加一个随机数(通常为当前时间戳或完全随机的数字)来阻止浏览器使用已有的缓存版本。...
weak-lru-cache软件包提供了功能强大的缓存,可与JS垃圾回收(GC)和最近最少使用(LRU)和最少最近使用(LFU)的过期策略协同工作,以帮助缓存高度优化的缓存数据。 它使用LRU / LFU(LRFU)到期来保留引用的数据,...
在LeetCode这个在线编程挑战平台上,有一道关于实现LRU缓存的题目,而“js_leetcode题解之LRU缓存_题解.zip”文件正是针对这道题目的JavaScript解法。 LRU缓存的主要思想是:当缓存满时,优先淘汰最近最少使用的...
### 判断类的缓存大小 #### 概述 在Java编程语言中,类与对象之间的关系至关重要。本文将深入探讨如何通过Java内置的关键字`instanceof`以及类方法`isInstance(Object obj)`和`isAssignableFrom(Class<?> cls)`来...
每次更新资源文件时,我们需要手动清除浏览器缓存,以确保浏览器获取最新的版本。然而,这个方法需要用户积极参与,否则用户可能会继续使用旧版本的资源文件。 方法二:添加版本号 这个方法是最常用的方法。我们...
在Web应用开发中,静态资源如JavaScript(.js)文件和CSS(.css)样式表文件的缓存问题是开发者经常需要面对的一个问题。缓存可以加快页面加载速度,但是如果缓存时间设置过长,会导致用户在网站发布新的资源后无法...
在Web开发中,提高网站性能和用户体验的一个关键策略是有效地缓存静态资源,如CSS、JavaScript文件等。静态资源缓存能够减少网络延迟,减轻服务器压力,并加速页面加载时间。以下将详细介绍关于“web服务器缓存静态...
3. 清理缓存:当需要清理WebView的缓存时,可以使用以下方法: ```java webView.clearCache(true); // 清除所有缓存,包括磁盘和内存 webView.clearHistory(); // 清除浏览历史 ``` 总结,Android的WebView组件提供...
应用缓存是HTML5离线存储的一种方式,允许开发者将静态资源(如HTML、CSS、JavaScript文件等)缓存到用户的本地,以便在网络不可用时仍能访问应用。启用应用缓存的方法是在HTML文档的`<html>`标签中添加`manifest`...