当咱们在作vue的服务器端渲染时,可能会碰到各类各样的坑,内存泄露就是其中的一种。固然,致使内存泄露的缘由有不少,不合理使用Axios也是其中一种,那下面我给你们介绍一下如何有效的避免请求中的内存泄露。vue
1. 安装缓存依赖: lru-cache
npm install lru-cache --dev
2. api 配置文件
config-server.jsnode
var LRU = require('lru-cache')
let api
if (process.__API__) {
api = process.__API__
} else {
api = process.__API__ = {
api: 'http://localhost:8181/api/',
//配置缓存
cached: LRU({
max: 1000,
maxAge: 1000 * 60 * 15
}),
cachedItem: {}
}
}
module.exports = api
3. 封装下 api
import axios from 'axios'
import qs from 'qs'
import md5 from 'md5'
import config from './config-server.js'
export default {
post(url, data) {
const key = md5(url + JSON.stringify(data))
if (config.cached && config.cached.has(key)) {
return Promise.resolve(config.cached.get(key))
}
return axios({
method: 'post',
url: config.api + url,
data: qs.stringify(data),
// 其余配置
}).then(res => {
if (config.cached && data.cache) config.cached.set(key, res)
return res
})
}
}
ajax 库咱们用axios, 由于axios在 nodejs 和 浏览器均可以使用,而且将 node 端和浏览器端分开封装ios
import config from './config-server.js'
const key = md5(url + JSON.stringify(data))
经过 url 和参数, 生成一个惟一的 keyajax
if (config.cached && config.cached.has(key)) {
return Promise.resolve(config.cached.get(key))
}
if (config.cached && data.cache) config.cached.set(key, res)
判断下是否是开启了缓存, 而且接口指定缓存的话, 将 api 返回的数据, 写入缓存npm
注意:这个 api 会处理全部的请求, 可是不少请求实际上是不须要缓存的, 因此须要缓存能够在传过来的 data 里, 添加个 cache: true, 如:axios
api.post('/api/test', {a: 1, b:2, cache: true})
不须要缓存的直接按正常传值便可api