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 document.images实例
May 27 Javascript
Javascript实现滚动图片新闻的实例代码
Nov 27 Javascript
JavaScript原型链示例分享
Jan 26 Javascript
node.js中的http.get方法使用说明
Dec 14 Javascript
js验证上传图片的方法
May 12 Javascript
理解JavaScript的变量的入门教程
Jul 07 Javascript
自己动手写的javascript前端等待控件
Oct 30 Javascript
理解JavaScript中Promise的使用
Jan 18 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
Oct 20 Javascript
bootstrap提示标签、提示框实现代码
Dec 28 Javascript
关于axios如何全局注册浅析
Jan 14 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
Feb 13 jQuery
从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+ajax实现文章自动保存的方法
2014/12/30 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
javascript判断是手机还是电脑访问网页的简单实例分享
2014/06/03 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
arguments对象验证函数的参数是否合法
2015/06/26 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
2015/11/22 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
2019/10/29 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
python smtplib模块发送SSL/TLS安全邮件实例
2015/04/08 Python
Python二分查找详解
2015/09/13 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
社会学专业求职信
2014/07/17 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
安徽导游词
2015/02/12 职场文书
志愿者个人总结
2015/03/03 职场文书
2015年母亲节寄语
2015/03/23 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书
六一亲子活动感想
2015/08/07 职场文书
Python中基础数据类型 set集合知识点总结
2021/08/02 Python
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android
Python Matplotlib绘制动画的代码详解
2022/05/30 Python
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS