vue服务端渲染页面缓存和组件缓存的实例详解


Posted in Javascript onSeptember 18, 2018

vue缓存分为页面缓存、组建缓存、接口缓存,这里我主要说到了页面缓存和组建缓存

页面缓存:

在server.js中设置

const LRU = require('lru-cache')
const microCache = LRU({
 max: 100, // 最大缓存的数目
 maxAge: 1000 // 重要提示:条目在 1 秒后过期。
})
 
const isCacheable = req => {
 //判断是否需要页面缓存
if (req.url && req.url === '/') {
 
 return req.url

} else {
 
return false

}
}
app.get('*', (req, res) => {
const cacheable = isCacheable(req)

if (cacheable) {


const hit = microCache.get(req.url)
 

if (hit) {
  
return res.end(hit)

}
 }
const errorHandler = err => {
 if (err && err.code === 404) {
  // 未找到页面
  res.status(404).sendfile('public/404.html');
 } else {
  // 页面渲染错误
  res.status(500).end('500 - Internal Server Error')
  console.error(`error during render : ${req.url}`)
  console.error(err)
 }
}
const context = {
 title: 'vue',
 keywords: 'vue-ssr服务端脚手架',
 description: 'vue-ssr-template, vue-server-renderer',
 version: v,
 url: req.url,
 cookies: req.cookies
}
renderer.renderToString(context, (err, html) => {
 if (err) {
  return errorHandler(err)
 }
 res.end(html)
 microCache.set(req.url, html) // 设置当前缓存页面的内容
})
})

组建缓存:

在server.js中设置如下:

function createRenderer(bundle, template) {
 return require('vue-server-renderer').createBundleRenderer(bundle, {
  template,
  cache: LRU({
   max: 1000,
   maxAge: 1000 * 60 * 5 // 组建缓存时间
  })
 })
}
let renderer
if (isProd) {
 // 生产环境使用本地打包文件来渲染
 const bundle = require('./output/vue-ssr-bundle.json')
 const template = fs.readFileSync(resolve('./output/index.html'), 'utf-8')
 renderer = createRenderer(bundle, template)
} else {
 // 开发环境使用webpack热更新服务
 require('./build/dev-server')(app, (bundle, template) => {
  renderer = createRenderer(bundle, template)
 })
}

 要缓存的组建

export default {
 name: 'Home',
 title() {
  return {
   title: 'vue-ssr',
   keywords: 'vue-ssr服务端脚手架, home',
   description: 'vue-ssr-template, vue-server-renderer, home'
  }
 },
 created() {
 },
 computed: {},
 asyncData({ store }) {},
 methods: {},
 serverCacheKey: props => props.id
}

serverCacheKey 返回的 key 应该包含足够的信息,来表示渲染结果的具体情况。如果渲染结果仅由 props.item.id 决定,则上述是一个很好的实现。但是,如果具有相同 id 的 item 可能会随时间而变化,或者如果渲染结果依赖于其他 prop,则需要修改 serverCacheKey 的实现,以考虑其他变量。如果 serverCacheKey返回常量将导致组件始终被缓存,这对纯静态组件是有好处的。

总结

以上所述是小编给大家介绍的vue服务端渲染页面缓存和组件缓存的实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript 写类方式之三
Jul 05 Javascript
JavaScript 判断判断某个对象是Object还是一个Array
Jan 28 Javascript
仿微博字符限制效果实现代码
Apr 20 Javascript
javascript特殊用法示例介绍
Nov 29 Javascript
调用HttpHanlder的几种返回方式小结
Dec 20 Javascript
自己封装的javascript事件队列函数版
Jun 12 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
Sep 24 Javascript
JS中判断null的方法分析
Nov 21 Javascript
JavaScript寄生组合式继承实例详解
Jan 06 Javascript
Node.js API详解之 dns模块用法实例分析
May 15 Javascript
vue项目接口域名动态获取操作
Aug 13 Javascript
JavaScript前后端JSON使用方法教程
Nov 23 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
Sep 18 #Javascript
vue服务端渲染添加缓存的方法
Sep 18 #Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
Sep 18 #Javascript
微信小程序开发之路由切换页面重定向问题
Sep 18 #Javascript
在小程序中使用canvas的方法示例
Sep 17 #Javascript
webpack4打包vue前端多页面项目
Sep 17 #Javascript
node中的密码安全(加密)
Sep 17 #Javascript
You might like
分享一个超好用的php header下载函数
2014/01/31 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
php注册登录系统简化版
2020/12/28 PHP
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
javascript中的正则表达式使用详解
2015/08/30 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
laydate日历控件使用方法详解
2017/11/20 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
python可视化实现代码
2019/01/15 Python
Django csrf 两种方法设置form的实例
2019/02/03 Python
python绘制漏斗图步骤详解
2019/03/04 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
大学毕业生自荐书怎么写?
2014/01/06 职场文书
幼儿园门卫岗位职责
2014/02/14 职场文书
学校献爱心活动总结
2014/07/08 职场文书
2014年服装销售工作总结
2014/11/27 职场文书
大学生党员个人总结
2015/02/13 职场文书
端午节寄语2015
2015/03/23 职场文书
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS