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 相关文章推荐
document.designMode的功能与使用方法介绍
Nov 22 Javascript
js 面向对象的技术创建高级 Web 应用程序
Feb 25 Javascript
Javascript下IE与Firefox下的差异兼容写法总结
Jun 18 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
May 13 Javascript
超漂亮的jQuery图片轮播特效
Nov 24 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
Jun 23 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
Jan 19 Javascript
基于javascript实现数字英文验证码
Jan 25 Javascript
基于JS对象创建常用方式及原理分析
Jun 28 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
Sep 21 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
Oct 27 Javascript
JS常用跨域方法实现原理解析
Dec 09 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
第十四节--命名空间
2006/11/16 PHP
PHP实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
php URL跳转代码 减少外链
2011/06/25 PHP
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
php实现留言板功能
2017/03/05 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
2019/05/31 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
dojo 之基础篇(三)之向服务器发送数据
2007/03/24 Javascript
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
微信小程序实现图片滚动效果示例
2018/12/05 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
python 并发下载器实现方法示例
2019/11/22 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
Django之form组件自动校验数据实现
2020/01/14 Python
如何表示python中的相对路径
2020/07/08 Python
如何使用python写截屏小工具
2020/09/29 Python
俄罗斯优惠券网站:BIGLION
2017/05/21 全球购物
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
Rag & Bone官网:瑞格布恩高级成衣
2018/04/19 全球购物
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
妇女工作先进事迹
2014/08/17 职场文书
演讲比赛主持词
2015/06/29 职场文书
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL