
中文 | 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 PRO 有啥用呢? 虽然缓存了 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 PRO @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 PRO @tower1229 #10 前后端分离. 好吧.省市选择器 为什么不直接写在代码中呢? 因为这个也是几乎不变的. 后者 lazyload 应该也可以吧…… 毕竟 做出来也是为了解决问题的. |
13 fulvaz 2018-03-12 16:26:19 +08:00 |
14 fulvaz 2018-03-12 16:29:42 +08:00 不如说楼主想做类似 PWA 一样的东西? 先渲染, ajax 后再更新页面 |
15 Chemist 2018-03-13 16:07:00 +08:00 cache-control ? |