写了一个 axios 缓存插件,帮你缓存 GET 请求

2017-06-25 10:15:27 +08:00
 jin5354

业务上遇到了自己控制缓存的需求,于是在 axios 上实现了一个简单的缓存层,抽出来分享一下(`・ω・´)

Github 仓库: axios-cache-plugin

安装

npm install axios-cache-plugin --save-dev

or

yarn add axios-cache-plugin --dev

使用

引入 wrapper,然后裹在 axios 或者 axios 实例上并用返回值替代即可,不用修改业务代码

import axios from 'axios'
import wrapper from 'axios-cache-plugin'

let http = wrapper(axios, {
  maxCacheSize: 15
})
export default http

API

插件并不是缓存全部 GET 请求,而是按正则匹配缓存指定的请求,这要求你添加 filter,url 命中 filter 的请求才会被缓存哦。(默认情况下不缓存任何请求。)

import axios from 'axios'
import wrapper from 'axios-cache-plugin'

let http = wrapper(axios, {
  maxCacheSize: 15
})
http.__addFilter(/users/)  //添加一个 filter

http({
  url: 'http://www.404forest.com:3000/users/jin5354',
  //命中 filter 啦,现在 http://www.404forest.com:3000/users/jin5354?test=something 结果会被缓存
  method: 'get',
  params: {
    test: 'something'
  }
})

http({
  url: 'http://www.404forest.com:3000/users/jin5354',
   //重复请求直接返回缓存结果,不再发新请求了。
  method: 'get',
  params: {
    test: 'something'
  }
})

wrapper option

包装 axios 实例时可以指定两个缓存配置项:maxCacheSize 和 ttl,非必需指定

maxCacheSize 指定最多可缓存的条目数,超过这个数量时最早的缓存会被删除,默认为 15

ttl 指缓存存活时间,单位为 ms,超过这个时间缓存条目自动消除。

let http = wrapper(axios, {
  maxCacheSize: 15,
  ttl: 60000
})

积极维护中,欢迎反馈

7425 次点击
所在节点    分享创造
5 条回复
v1024
2017-06-25 10:39:24 +08:00
滋瓷,mark
MinonHeart
2017-06-25 11:46:45 +08:00
需要把浏览器缓存踢掉
jin5354
2017-06-25 13:10:54 +08:00
@MinonHeart
请求会先通过 axios 的缓存层,再走浏览器缓存,如果两个缓存都存在,可以节省一次 304
当然先把浏览器缓存禁掉控制更准确一些
leopku
2017-06-25 14:48:03 +08:00
滋瓷
star
skxtay
2017-07-13 17:05:06 +08:00
滋瓷

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

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

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

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

© 2021 V2EX