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 相关文章推荐
传智播客学习之java 反射
Nov 22 Javascript
JavaScript 常用函数
Dec 30 Javascript
javascript中关于执行环境的杂谈
Aug 14 Javascript
javascript+xml实现简单图片轮换(只支持IE)
Dec 23 Javascript
JavaScript中的数值范围介绍
Dec 29 Javascript
Bootstrap基本插件学习笔记之Tooltip提示工具(18)
Dec 08 Javascript
原生js实现返回顶部缓冲效果
Jan 18 Javascript
JavaScript 基础表单验证示例(纯Js实现)
Jul 20 Javascript
浅析Javascript中双等号(==)隐性转换机制
Oct 27 Javascript
使用async、enterproxy控制并发数量的方法详解
Jan 02 Javascript
React组件内事件传参实现tab切换的示例代码
Jul 04 Javascript
浅谈JavaScript 声明提升
Sep 14 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
LNMP部署laravel以及xhprof安装使用教程
2017/09/14 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
Prototype RegExp对象 学习
2009/07/19 Javascript
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
js 验证密码强弱的小例子
2013/03/21 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
jQuery+正则+文本框只能输入数字的实现方法
2016/10/07 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
使用Python抓取模板之家的CSS模板
2015/03/16 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
关于多元线性回归分析——Python&SPSS
2020/02/24 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
Mistine官方海外旗舰店:泰国国民彩妆品牌
2016/12/28 全球购物
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
公司前台辞职报告
2014/01/19 职场文书
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
员工考核评语大全
2014/04/26 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
2015年试用期自我评价范文
2015/03/10 职场文书
银行优秀员工推荐信
2015/03/24 职场文书
高中数学教学反思范文
2016/02/18 职场文书
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS
业余无线电通联Q语
2022/02/18 无线电
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电