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 相关文章推荐
取选中的radio的值
Jan 11 Javascript
9个JavaScript评级/投票插件
Jan 18 Javascript
jQueryMobile之Helloworld与页面切换的方法
Feb 04 Javascript
JS组件Bootstrap导航条使用方法详解
Apr 29 Javascript
js弹出窗口返回值的简单实例
May 28 Javascript
在localStorage中存储对象数组并读取的方法
Sep 24 Javascript
Angular中实现树形结构视图实例代码
May 05 Javascript
js注册时输入合法性验证方法
Oct 21 Javascript
JS数组进阶示例【数组的几种函数用法】
Jan 16 Javascript
vue-socket.io跨域问题有效解决方法
Feb 11 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
Nov 05 Javascript
JS实现点击掉落特效
Jan 29 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
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
深入php var_dump()函数的详解
2013/06/05 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
2013/12/25 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
2016/06/07 Javascript
angularjs实现上拉加载和下拉刷新数据功能
2017/06/12 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
解读ES6中class关键字
2017/11/20 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
python中字典按键或键值排序的实现代码
2019/08/27 Python
Python传递参数的多种方式(小结)
2019/09/18 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
python opencv进行图像拼接
2020/03/27 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
销售人员个人求职信
2013/09/26 职场文书
大学生求职简历的自我评价
2013/10/21 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
毕业生自荐信如何写
2014/03/24 职场文书
大型公益活动策划方案
2014/08/20 职场文书
酒店周年庆活动方案
2014/08/21 职场文书
校园广播站开场白
2015/06/01 职场文书
九不准学习心得体会
2016/01/23 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
Mybatis-plus在项目中的简单应用
2021/07/01 Java/Android
MySQL系列之六 用户与授权
2021/07/02 MySQL
vue打包时去掉所有的console.log
2022/04/10 Vue.js