清理 JS 缓存的方法及源码详解
清理网站缓存的几种方法
1、meta标签法:
在HTML中添加meta标签,可以控制浏览器不缓存页面。
“`html
<META HTTPEQUIV="pragma" CONTENT="nocache">
<META HTTPEQUIV="CacheControl" CONTENT="nocache, mustrevalidate">
<META HTTPEQUIV="expires" CONTENT="0">
“`
2、jQuery AJAX清除缓存
方式一:通过设置请求头IfModifiedSince
和CacheControl
来避免缓存。
$.ajax({
url: ‘www.haorooms.com’,
dataType: ‘json’,
data: {},
beforeSend: function(xmlHttp) {
xmlHttp.setRequestHeader("IfModifiedSince", "0");
xmlHttp.setRequestHeader("CacheControl", "nocache");
},
success: function(response) {
// 操作
}
});
“`
方式二:直接将cache
选项设置为false
。
$.ajax({
url: ‘www.haorooms.com’,
dataType: ‘json’,
data: {},
cache: false,
ifModified: true,
success: function(response) {
// 操作
}
});
“`
方式三:在URL参数后加上随机数。
URL 参数后加上 "?ran=" + Math.random(); // 当然这里参数 ran 可以任意取了
“`
方式四:在URL参数后加上随机时间戳。
“`javascript
URL 参数后加上 "?timestamp=" + new Date().getTime();
“`
3、后端PHP代码清理缓存:
在服务端设置header
来控制缓存。
“`php
header("CacheControl: nocache, mustrevalidate");
“`
4、JavaScript代码清理缓存:
location.reload()方法:强制重新加载当前页面并禁用缓存。
“`javascript
location.reload(true);
“`
navigator.serviceWorker.getRegistrations()方法:取消所有服务工作者的注册,清除HTTP缓存。
“`javascript
if (‘serviceWorker’ in navigator) {
navigator.serviceWorker.getRegistrations()
.then(function(registrations) {
for (let registration of registrations) {
registration.unregister();
}
});
}
“`
caches.open()和cache.delete()方法:使用Cache API打开一个命名的缓存,然后删除特定资源。
“`javascript
caches.open(‘mycache’).then(function(cache) {
cache.delete(‘myresource’);
});
“`
localStorage.clear()和sessionStorage.clear()方法:分别从localStorage和sessionStorage对象中删除所有键值对。
“`javascript
localStorage.clear();
sessionStorage.clear();
“`
5、实现F5刷新效果:
window.location.reload():根据缓存有效期决定是否重新下载内容。
“`javascript
window.location.reload(false);
window.location.href = window.location.href;
“`
Ctrl+F5和Shift+F5效果:强制重新从服务器下载所有内容。
“`javascript
window.location.reload(true);
window.location.replace(window.location.href);
“`
cacheables库的使用与源码分析
1、介绍:
「cacheables」是一个用于内存缓存的简单库,支持多种缓存策略,适用于浏览器和Node.js,无外部依赖,体积小(gzip后仅1.43kb)。
2、上手体验:
“`javascript
// 没有使用缓存
fetch("https://someurl.com/api");
// 有使用缓存
cache.cacheable(() => fetch("https://someurl.com/api"), "key");
“`
3、API介绍:
new Cacheables(options?): Cacheables
:创建一个新的缓存实例。
cache.cacheable(resource, key, options?): Promise<T>
:包装一个方法进行缓存。
cache.delete(key: string): void
:删除一笔缓存。
cache.clear(): void
:清除所有缓存。
cache.keys(): string[]
:返回所有的缓存key。
cache.isCached(key: string): boolean
:检查指定key是否存在且有效。
Cacheables.key(...args: (string | number)[]): string
:生成缓存key。
4、源码分析:
创建缓存实例时,会保存入参并定义一些方法和属性。
cache.cacheable()
方法用于包装API调用,实现缓存功能。
cache.delete()
和cache.clear()
用于删除缓存项和清空所有缓存。
cache.keys()
和cache.isCached()
用于管理和检查缓存状态。
相关问题与解答
1、如何确保每次请求都是最新的数据?
确保每次请求都是最新的数据可以通过以下方法:在请求URL后添加随机数或时间戳,或者设置请求头CacheControl
为nocache
。
“`javascript
$.ajax({
url: ‘www.example.com?timestamp=’ + new Date().getTime(),
dataType: ‘json’,
success: function(response) {
// 操作
}
});
“`
2、如何在前端项目中有效地管理缓存?
有效的缓存管理可以通过以下方法实现:使用版本号控制文件名,利用meta标签控制页面缓存,结合服务端设置适当的缓存策略,以及合理使用本地存储和会话存储。
“`html
<link rel="stylesheet" href="styles.css?v=1.0.0">
“`
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1085380.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复