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
Aug 13 Javascript
加速IE的Javascript document输出的方法
Dec 02 Javascript
基于jquery的复制网页内容到WORD的实现代码
Feb 16 Javascript
javascript模拟实现C# String.format函数功能代码
Nov 25 Javascript
JS获取计算机mac地址以及IP的实现方法
Jan 08 Javascript
AngularJS 服务详细讲解及示例代码
Aug 17 Javascript
angularjs项目的页面跳转如何实现(5种方法)
May 25 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
Feb 24 jQuery
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
Apr 21 Javascript
node中使用log4js4.x版本记录日志的方法
Aug 20 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
Sep 20 Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
Jul 28 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 insert语法详解
2008/06/07 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
Javascript MD4
2006/12/20 Javascript
WordPress JQuery处理沙发头像
2009/06/22 Javascript
关于JavaScript定义类和对象的几种方式
2010/11/09 Javascript
jQuery焦点图切换特效插件封装实例
2013/08/18 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
node.js require() 源码解读
2015/12/13 Javascript
基于jquery实现的鼠标悬停提示案例
2016/12/11 Javascript
vue学习笔记之指令v-text && v-html && v-bind详解
2017/05/12 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
Vue cli 引入第三方JS和CSS的常用方法分享
2018/01/20 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
[00:16]热血竞技场
2019/03/06 DOTA
Python 编码处理-str与Unicode的区别
2016/09/06 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
Python学习笔记之lambda表达式用法详解
2019/08/08 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
python爬取2021猫眼票房字体加密实例
2021/02/19 Python
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
《问银河》教学反思
2014/02/19 职场文书
餐饮采购员岗位职责
2014/03/15 职场文书
技术股东合作协议书
2014/12/02 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
作文批改评语
2014/12/25 职场文书
就业意向协议书
2015/01/29 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers