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 相关文章推荐
jquery下jstree简单应用 - v1.0
Apr 14 Javascript
文本框根据输入内容自适应高度的代码
Oct 24 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
Jan 20 Javascript
得到form下的所有的input的js代码
Nov 07 Javascript
JQuery对表单元素的基本操作使用总结
Jul 18 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
Jun 19 Javascript
详解JavaScript数组的操作大全
Oct 19 Javascript
详解jQuery选择器
Dec 21 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
Mar 04 Javascript
antd Upload 文件上传的示例代码
Dec 14 Javascript
原生js实现拖拽移动与缩放效果
Aug 24 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
Nov 18 Vue.js
从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删除数组中的特定元素的代码
2012/06/28 PHP
php实现监控varnish缓存服务器的状态
2014/12/30 PHP
PHP输入流php://input实例讲解
2015/12/22 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
2018/05/11 PHP
actionscript与javascript的区别
2011/05/25 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
javascript编程异常处理实例小结
2015/11/30 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
js保留两位小数方法总结
2018/01/31 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
Python实现随机选择元素功能
2017/09/14 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
Python实现的调用C语言函数功能简单实例
2019/03/13 Python
基于Python的PIL库学习详解
2019/05/10 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
keras中的卷积层&池化层的用法
2020/05/22 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
用python批量移动文件
2021/01/14 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
CLR与IL分别是什么含义
2016/08/23 面试题
财政局长自荐信范文
2013/12/22 职场文书
担保书怎么写
2014/04/01 职场文书
平安工地汇报材料
2014/08/19 职场文书
法人委托书的范本格式
2014/09/11 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
使用Python脚本对GiteePages进行一键部署的使用说明
2021/05/27 Python
Python实现日志实时监测的示例详解
2022/04/06 Python