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多行字符串的简单实现方式
May 04 Javascript
JS模态窗口返回值兼容问题的完美解决方法
May 28 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
Jul 18 Javascript
canvas实现爱心和彩虹雨效果
Mar 09 Javascript
js图片放大镜实例讲解(必看篇)
Jul 17 Javascript
javascript input输入框模糊提示功能的实现
Sep 25 Javascript
seajs下require书写约定实例分析
May 16 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
Sep 02 Javascript
你应该了解的JavaScript Array.map()五种用途小结
Nov 14 Javascript
vue实现的网易云音乐在线播放和下载功能案例
Feb 18 Javascript
Vue2.0 实现页面缓存和不缓存的方式
Nov 12 Javascript
jquery插件实现轮播图效果
Oct 19 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
CI框架中redis缓存相关操作文件示例代码
2016/05/17 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
2014/07/17 Javascript
Nodejs+express+html5 实现拖拽上传
2014/08/08 NodeJs
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
canvas时钟效果
2017/02/16 Javascript
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
详解JavaScript中的Object.is()与"==="运算符总结
2020/06/17 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
Python网络爬虫实例讲解
2016/04/28 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
介绍一下Ruby的多线程处理
2013/02/01 面试题
毕业生自我鉴定
2013/12/04 职场文书
回门宴新郎答谢词
2014/01/12 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
继续教育个人总结
2015/03/03 职场文书
终止劳动合同通知书
2015/04/16 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
2016寒假假期总结
2015/10/10 职场文书
财产分割协议书
2016/03/22 职场文书