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代码优化 选择符篇
Nov 01 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
Jan 02 Javascript
关于JavaScript命名空间的一些心得
Jun 07 Javascript
js常用数组操作方法简明总结
Jun 20 Javascript
JavaScript实现生成GUID(全局统一标识符)
Sep 05 Javascript
javascript浏览器窗口之间传递数据的方法
Jan 20 Javascript
再谈Javascript中的异步以及如何异步
Aug 19 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
Mar 06 Javascript
angular使用post、get向后台传参的问题实例
May 27 Javascript
在vue项目中引入高德地图及其UI组件的方法
Sep 04 Javascript
微信小程序实现的自定义分享功能示例
Feb 12 Javascript
vue实现点击追加选中样式效果
Nov 01 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实现图片裁剪、添加水印效果代码
2014/10/01 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
PHP PDOStatement::errorInfo讲解
2019/01/31 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
javaScript NameSpace 简单说明介绍
2013/07/18 Javascript
jquery 使用简明教程
2014/03/05 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
Javascript动态创建div的方法
2015/02/09 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
微信小程序适配iphoneX的实现方法
2018/09/18 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
python类型强制转换long to int的代码
2013/02/10 Python
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
Python延时操作实现方法示例
2018/08/14 Python
Python3利用print输出带颜色的彩色字体示例代码
2019/04/08 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
python实现图片上添加图片
2019/11/26 Python
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
skyn ICELAND官网:冰岛成分天然护肤品
2020/08/24 全球购物
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2015/02/22 面试题
感恩教师节演讲稿
2014/09/03 职场文书
2014机关干部学习“焦裕禄精神”思想汇报
2014/09/19 职场文书
毕业生实习证明
2014/09/19 职场文书
小区保洁员岗位职责
2015/04/10 职场文书
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript
python基础之模块的导入
2021/10/24 Python
python脚本框架webpy模板赋值实现
2021/11/20 Python
一文简单了解MySQL前缀索引
2022/04/03 MySQL