vue服务端渲染缓存应用详解


Posted in Javascript onSeptember 12, 2018

服务端渲染简介

服务端渲染不是一个新的技术;在 Web 最初的时候,页面就是通过服务端渲染来返回的,用 PHP 来说,通常是使用 Smarty 等模板写模板文件,然后 PHP 服务端框架将数据和模板渲染为页面返回,这样的服务端渲染有个缺点就是一旦要查看新的页面,就需要请求服务端,刷新页面。

但如今的前端,为了追求一些体验上的优化,通常整个渲染在浏览器端使用 JS 来完成,配合 history.pushState 等方式来做单页应用(SPA: Single-Page Application),也收到不错的效果,但是这样还是有一些缺点:第一次加载过慢,用户需要等待较长时间来等待浏览器端渲染完成;对搜索引擎爬虫等不友好。这时候就出现了类似于 React,Vue 2.0 等前端框架来做服务端渲染。

本文重点给大家介绍vue服务端渲染缓存应用,先看下vue缓存分为哪几种吧。

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的执行速度
Jan 23 Javascript
分享27款非常棒的jQuery 表单插件
Mar 28 Javascript
jQuery中next()方法用法实例
Jan 07 Javascript
总结AngularJS开发者最常犯的十个错误
Aug 31 Javascript
js实现4个方向滚动的球
Mar 06 Javascript
浅谈JavaScript作用域和闭包
Sep 18 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
Dec 01 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
May 04 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
Aug 01 Javascript
Vue 中可以定义组件模版的几种方式
Aug 06 Javascript
js计算最大公约数和最小公倍数代码实例
Sep 11 Javascript
node.js Promise对象的使用方法实例分析
Dec 26 Javascript
angularjs中判断ng-repeat是否迭代完的实例
Sep 12 #Javascript
如何解决React官方脚手架不支持Less的问题(小结)
Sep 12 #Javascript
详解JavaScript中操作符和表达式
Sep 12 #Javascript
JS 数组随机洗牌的实例代码
Sep 12 #Javascript
使用RN Animated做一个“添加购物车”动画的方法
Sep 12 #Javascript
小程序组件之仿微信通讯录的实现代码
Sep 12 #Javascript
Vue弹出菜单功能的实现代码
Sep 12 #Javascript
You might like
PHP 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
js 弹出菜单/窗口效果
2011/10/30 Javascript
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
使用正则表达式的格式化与高亮显示json字符串
2014/12/03 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
2015/09/14 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
jquery实现的放大镜效果示例
2020/02/24 jQuery
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
python利用高阶函数实现剪枝函数
2018/03/20 Python
python实现简易数码时钟
2021/02/19 Python
pow在python中的含义及用法
2019/07/11 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
Python实现壁纸下载与轮换
2020/10/19 Python
SQL SERVER面试资料
2013/03/30 面试题
ajax是什么及其工作原理
2012/02/08 面试题
汽车销售求职自荐信
2013/10/01 职场文书
建筑自我鉴定
2013/10/19 职场文书
宿舍打麻将检讨书
2014/01/24 职场文书
幼儿园的门卫岗位职责
2014/04/10 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书