AJAX-Cache:一款好用的 Ajax 缓存插件

2018-03-07 13:15:51 +08:00
 tower1229

中文 | English

AJAX-Cache

:tophat:最好用的 jQuery-Ajax 缓存插件

介绍

AJAX-Cache 是一款 jQuery 插件,基于 localStorage/sessionStorage 实现异步请求缓存功能,并提供“快照”和“定时”两种缓存模式。

安装

npm

npm i @tower1229/flow-ui

Download

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/

许可证

MIT

Copyright (c) 2017-present, refined-x.com

3245 次点击
所在节点    分享创造
15 条回复
qfdk
2018-03-08 03:14:58 +08:00
有啥用呢? 虽然缓存了 ajax 不是为了拿到直接数据或者提交用么? 每次刷新都要进缓存? 然后后端来了新数据 再更新缓存? 看了 lz 的 demo 还是有点儿凌乱。 楼主应该写个实际应用场景
Kokororin
2018-03-08 08:37:37 +08:00
flow-ui 什么鬼
tower1229
2018-03-08 09:13:19 +08:00
@qfdk 大多数的缓存场景是,希望将某个接口数据在一定时间段内缓存起来,缓存期内不再发起请求直接返回本地数据,过了这段时间再重新获取并更新缓存。这就是“定时缓存”的典型使用场景。
还有的时候我们希望接口能兼具实时性和响应速度,比如应用首屏的异步数据,既要快又要新,虽然这种需求听起来很“不科学”,但确实可以通过“快照缓存”满足这个需求。
tower1229
2018-03-08 09:13:38 +08:00
@Kokororin 写错啦,应该是`npm i ajax-cache --save`
zhongkouwei
2018-03-08 09:58:26 +08:00
怎么说呢,我角色目前来说,前端性能资源更珍贵一点吧~
tower1229
2018-03-08 10:36:40 +08:00
@zhongkouwei 缓存了也并不耗费前端性能,只是占用一点本地存储空间。另外即便服务端性能不是瓶颈也不能浪费啊,比如省市区数据这种常年不更新但每次都要请求的数据,缓存一下就可以减少不少带宽;又比如遇到鬼畜用户喜欢点来点去,请求不停的发,这时候我们缓存个 5 秒钟给服务端喘口气也能减少一点浪费
iyangyuan
2018-03-08 10:48:51 +08:00
数据缓存好像并没有这么简单
qfdk
2018-03-08 15:32:50 +08:00
@tower1229 ls 也就是个 临时文件的作用了。

> `希望将某个接口数据在一定时间段内缓存起来,缓存期内不再发起请求直接返回本地数据,过了这段时间再重新获取并更新缓存。`

默认不是已经渲染到页面了么? 缓存期 不就是个 setTimeOut 的过程么?

个人理解 缓存存的是 css js 这样不需要经常变的东西,类似于 imququ,或者 http://t.i2.tn/

ajax 目的就是为了拿到新数据。要不然你直接载入本地缓存 那 ajax 完全没意义了。

虽然减少了请求。。。。

希望 lz 发个自己开发中应用到的 demo 或者什么 更让人信服
DT27
2018-03-08 18:08:24 +08:00
感谢楼主,等明天研究下。
有个需求是缓存 api 请求结果,因为 api 请求频率有限,明天看看适不适用。
tower1229
2018-03-09 11:38:44 +08:00
@qfdk 看来你真的想象不出来这东西有啥用,举两个具体的例子。前端做个省市区选择器,数据是后端管理的要用 ajax 获取,但省市区数据可能一年都未必更新一次,所以前端把这个数据缓存起来,用户几天之内打开网站用的都是缓存的省市区数据,不需要请求后端,这个好理解吧。再来一个快照缓存的例子,手机站首页的 banner 图,占据首屏最重要位置而且数据是异步获取的,打开页面时前端为了避免请求 banner 数据时开天窗,于是直接将上一次的请求结果拿来展示,先让用户看到东西,等最新的数据拿到了再更新 banner 的内容(手淘首页的千人千面也是类似的做法),这就是快照缓存的意义
qfdk
2018-03-09 15:59:50 +08:00
@tower1229 #10 前后端分离. 好吧.省市选择器 为什么不直接写在代码中呢? 因为这个也是几乎不变的. 后者 lazyload 应该也可以吧…… 毕竟 做出来也是为了解决问题的.
tower1229
2018-03-11 18:04:40 +08:00
@qfdk 你没听懂
fulvaz
2018-03-12 16:26:19 +08:00
@tower1229

@qfdk 没说错啊, 省市问题的话, 写代码中, 然后提取一个 chunk, 然后 lazy-load, 弄好 chunkhash, 浏览器就帮你缓存好了

如果是能解决鬼畜点击的问题, 但是面对鬼畜点击为什么不加点击频次限制?

另外加了缓存必须面对和服务端数据不一致的问题, 这不是还要考虑缓存策略的问题?

那绕了这么远, 干嘛不直接用 @qfdk 的方案?

楼主的场景还是没举清楚
fulvaz
2018-03-12 16:29:42 +08:00
不如说楼主想做类似 PWA 一样的东西?

先渲染, ajax 后再更新页面
kyuuseiryuu
2018-03-13 16:07:00 +08:00
cache-control ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/435726

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX