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 相关文章推荐
js中eval()函数和trim()去掉字符串左右空格应用
Feb 02 Javascript
JS获取表格内指定单元格html内容的方法
Mar 31 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
Nov 26 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
Jan 26 Javascript
JavaScript常用字符串与数组扩展函数小结
Apr 24 Javascript
老生常谈Bootstrap媒体对象
Jul 06 Javascript
JavaScript面向对象精要(下部)
Sep 12 Javascript
jquery实现图片跟随鼠标的实例
Oct 17 jQuery
Vue源码探究之状态初始化
Nov 14 Javascript
解决vue跨域axios异步通信问题
Apr 17 Javascript
小程序实现日历左右滑动效果
Oct 21 Javascript
vue 如何使用递归组件
Oct 23 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
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
javascript json 新手入门文档
2009/12/03 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
2016/12/07 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
原生JS实现跑马灯效果
2017/02/20 Javascript
手机端转换rem适应
2017/04/01 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
vue使用vant中的checkbox实现全选功能
2020/11/17 Vue.js
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
python爬虫框架talonspider简单介绍
2017/06/09 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
Python实现App自动签到领取积分功能
2018/09/29 Python
python数据批量写入ScrolledText的优化方法
2018/10/11 Python
将pip源更换到国内镜像的详细步骤
2019/04/07 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
Python 解析简单的XML数据
2020/07/24 Python
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
竞选大队委员演讲稿
2014/04/28 职场文书
综合实践活动总结
2014/05/05 职场文书
白血病募捐倡议书
2014/05/14 职场文书
新郎接新娘保证书
2015/05/08 职场文书
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python