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 遍历对象中的子对象
Jul 03 Javascript
通用javascript脚本函数库 方便开发
Oct 13 Javascript
JQuery下的Live方法和$.browser方法使用代码
Jun 02 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
Sep 21 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
Jun 05 Javascript
JS选取DOM元素的简单方法
Jul 08 Javascript
纯css下拉菜单 无需js
Aug 15 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
Oct 04 Javascript
通过js修改input、select默认字体颜色
Apr 19 Javascript
vue实现模态框的通用写法推荐
Feb 26 Javascript
Vue项目分环境打包的实现步骤
Apr 02 Javascript
JS module的导出和导入的实现代码
Feb 25 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上传文件功能
2017/09/21 PHP
MSN消息提示类
2006/09/05 Javascript
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
Javascript模仿淘宝信用评价实例(附源码)
2015/11/26 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
JS模拟实现方法重载示例
2016/08/03 Javascript
学习vue.js计算属性
2016/12/03 Javascript
ES6学习教程之对象字面量详解
2017/10/09 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
微信小程序实现收货地址左滑删除
2020/11/18 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python中的Numpy入门教程
2014/04/26 Python
自己使用总结Python程序代码片段
2015/06/02 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
python中的&&及||的实现示例
2019/08/07 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
python实现多进程按序号批量修改文件名的方法示例
2019/12/30 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
如何开启linux的ssh服务
2013/06/03 面试题
介绍一下Ruby的特点
2013/01/20 面试题
大学生村官心得体会范文
2014/01/04 职场文书
高二地理教学反思
2014/01/24 职场文书
平安建设实施方案
2014/03/19 职场文书
2014年大学生职业规划书:未来不是梦,只要勇敢冲!
2014/09/22 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
大学生个人年度总结范文
2015/02/15 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书
Python面向对象编程之类的概念
2021/11/01 Python