引用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`...