中文 | English
:tophat:最好用的 jQuery-Ajax 缓存插件
AJAX-Cache 是一款 jQuery 插件,基于 localStorage/sessionStorage 实现异步请求缓存功能,并提供“快照”和“定时”两种缓存模式。
npm i @tower1229/flow-ui
https://github.com/tower1229/AJAX-Cache
你只需要为 jQuery.ajax()增加一个localCache
配置
$.ajax({
url: "http://rapapi.org/mockjsdata/9195/common/getRandom",
dataType:'json',
localCache: 'snapshot',
success: function(res) {
if (res.snapshot) {
console.log('[snapshot] ' + res.data);
} else {
console.log('[remote data] ' + res.data);
}
}
});
$.ajax({
url: "http://rapapi.org/mockjsdata/9195/common/getRandom",
dataType:'json',
localCache: 5000,
success: function(res) {
console.log('\n[Caching for 5 seconds] ' + res.data);
}
});
$.ajax({
url: "http://rapapi.org/mockjsdata/9195/common/getRandom",
dataType:'json',
localCache: false,
success: function(res) {
console.log('Cache has been cleared');
console.log(res.data);
}
});
$.ajaxCache.clear();
$.ajaxCache.set({
storage: 'localStorage', //存储方式,默认"localStorage",可选择"sessionStorage"
cacheNamePrefix: '_ajaxcache' //存储前缀,通常不需要修改
});
http://refined-x.com/AJAX-Cache/test/
Copyright (c) 2017-present, refined-x.com
1
qfdk 2018-03-08 03:14:58 +08:00 via iPhone
有啥用呢? 虽然缓存了 ajax 不是为了拿到直接数据或者提交用么? 每次刷新都要进缓存? 然后后端来了新数据 再更新缓存? 看了 lz 的 demo 还是有点儿凌乱。 楼主应该写个实际应用场景
|
2
Kokororin 2018-03-08 08:37:37 +08:00 via iPhone
flow-ui 什么鬼
|
3
tower1229 OP @qfdk 大多数的缓存场景是,希望将某个接口数据在一定时间段内缓存起来,缓存期内不再发起请求直接返回本地数据,过了这段时间再重新获取并更新缓存。这就是“定时缓存”的典型使用场景。
还有的时候我们希望接口能兼具实时性和响应速度,比如应用首屏的异步数据,既要快又要新,虽然这种需求听起来很“不科学”,但确实可以通过“快照缓存”满足这个需求。 |
5
zhongkouwei 2018-03-08 09:58:26 +08:00
怎么说呢,我角色目前来说,前端性能资源更珍贵一点吧~
|
6
tower1229 OP @zhongkouwei 缓存了也并不耗费前端性能,只是占用一点本地存储空间。另外即便服务端性能不是瓶颈也不能浪费啊,比如省市区数据这种常年不更新但每次都要请求的数据,缓存一下就可以减少不少带宽;又比如遇到鬼畜用户喜欢点来点去,请求不停的发,这时候我们缓存个 5 秒钟给服务端喘口气也能减少一点浪费
|
7
iyangyuan 2018-03-08 10:48:51 +08:00
数据缓存好像并没有这么简单
|
8
qfdk 2018-03-08 15:32:50 +08:00
@tower1229 ls 也就是个 临时文件的作用了。
> `希望将某个接口数据在一定时间段内缓存起来,缓存期内不再发起请求直接返回本地数据,过了这段时间再重新获取并更新缓存。` 默认不是已经渲染到页面了么? 缓存期 不就是个 setTimeOut 的过程么? 个人理解 缓存存的是 css js 这样不需要经常变的东西,类似于 imququ,或者 http://t.i2.tn/ 。 ajax 目的就是为了拿到新数据。要不然你直接载入本地缓存 那 ajax 完全没意义了。 虽然减少了请求。。。。 希望 lz 发个自己开发中应用到的 demo 或者什么 更让人信服 |
9
DT27 2018-03-08 18:08:24 +08:00
感谢楼主,等明天研究下。
有个需求是缓存 api 请求结果,因为 api 请求频率有限,明天看看适不适用。 |
10
tower1229 OP @qfdk 看来你真的想象不出来这东西有啥用,举两个具体的例子。前端做个省市区选择器,数据是后端管理的要用 ajax 获取,但省市区数据可能一年都未必更新一次,所以前端把这个数据缓存起来,用户几天之内打开网站用的都是缓存的省市区数据,不需要请求后端,这个好理解吧。再来一个快照缓存的例子,手机站首页的 banner 图,占据首屏最重要位置而且数据是异步获取的,打开页面时前端为了避免请求 banner 数据时开天窗,于是直接将上一次的请求结果拿来展示,先让用户看到东西,等最新的数据拿到了再更新 banner 的内容(手淘首页的千人千面也是类似的做法),这就是快照缓存的意义
|
11
qfdk 2018-03-09 15:59:50 +08:00 via iPhone
@tower1229 #10 前后端分离. 好吧.省市选择器 为什么不直接写在代码中呢? 因为这个也是几乎不变的. 后者 lazyload 应该也可以吧…… 毕竟 做出来也是为了解决问题的.
|
13
fulvaz 2018-03-12 16:26:19 +08:00 1
|
14
fulvaz 2018-03-12 16:29:42 +08:00
不如说楼主想做类似 PWA 一样的东西?
先渲染, ajax 后再更新页面 |
15
kyuuseiryuu 2018-03-13 16:07:00 +08:00
cache-control ?
|