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的数据类型检测
Jul 10 Javascript
两个listbox实现选项的添加删除和搜索
Mar 01 Javascript
JavaScript数值转换的三种方式总结
Jul 31 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
May 04 Javascript
20分钟轻松创建自己的Bootstrap站点
May 12 Javascript
js简单实现网页换肤功能
Apr 07 Javascript
JavaScript文件的同步和异步加载的实现代码
Aug 19 Javascript
vue-router路由与页面间导航实例解析
Nov 07 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
Nov 13 jQuery
vue-cli初始化项目中使用less的方法
Aug 09 Javascript
JS+canvas五子棋人机对战实现步骤详解
Jun 04 Javascript
Vue点击切换Class变化,实现Active当前样式操作
Jul 17 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 魔术方法使用说明
2009/10/20 PHP
PHP下打开URL地址的几种方法小结
2010/05/16 PHP
PHP 第二节 数据类型之转换
2012/04/28 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
php getcwd与dirname(__FILE__)区别详解
2016/09/24 PHP
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
ejs v9 javascript模板系统
2012/03/21 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
JavaScript接口的实现三种方式(推荐)
2016/06/14 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
2018/11/30 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
Python中的Descriptor描述符学习教程
2016/06/02 Python
遗传算法之Python实现代码
2017/10/10 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
Python用for循环实现九九乘法表
2018/05/31 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
毕业自荐信
2013/12/16 职场文书
银行门卫岗位职责
2013/12/29 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
初中班主任评语
2014/04/24 职场文书
大学生就业求职信
2014/06/12 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
关于对大人不礼貌的检讨书
2014/09/29 职场文书
公司员工培训管理制度
2015/08/04 职场文书
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL