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/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
Nov 25 Javascript
jsPDF生成pdf后在网页展示实例
Jan 16 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
May 08 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
Jun 24 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
Apr 18 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
Feb 14 Javascript
vue+axios实现登录拦截的实例代码
May 22 Javascript
详解webpack分离css单独打包
Jun 21 Javascript
一文让你彻底搞清楚javascript中的require、import与export
Sep 24 Javascript
详解React+Koa实现服务端渲染(SSR)
May 23 Javascript
vue路由守卫+登录态管理实例分析
May 21 Javascript
Vue中正确使用Element-UI组件的方法实例
Oct 13 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
也谈截取首页新闻 - 范例
2006/10/09 PHP
PHP设计模式之调解者模式的深入解析
2013/06/13 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
JS组件Bootstrap Table使用方法详解
2016/02/02 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
关于AngularJS中ng-repeat不更新视图的解决方法
2018/09/30 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
什么时候不能在 Node.js 中使用 Lock Files
2019/06/24 Javascript
vue实现的多页面项目如何优化打包的步骤详解
2020/07/19 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
Python3 入门教程 简单但比较不错
2009/11/29 Python
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python的Django框架中settings文件的部署建议
2015/05/30 Python
Python 3.6打包成EXE可执行程序的实现
2019/10/18 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
通过实例解析Python文件操作实现步骤
2020/09/21 Python
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
Sql面试题
2013/03/20 面试题
毕业生求职简历的自我评价
2013/10/07 职场文书
数据管理员的自我评价分享
2013/11/15 职场文书
工作证明英文模板
2014/10/21 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS