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 相关文章推荐
jquery.autocomplete修改实现键盘上下键自动填充示例
Nov 19 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
Oct 17 Javascript
javascript的switch用法注意事项分析
Feb 02 Javascript
javascript实现简单的鼠标拖动效果实例
Apr 10 Javascript
jquery插件star-rating.js实现星级评分特效
Apr 15 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
Oct 08 Javascript
理解Javascript文件动态加载
Jan 29 Javascript
Express进阶之log4js实用入门指南
Feb 10 Javascript
React 使用browserHistory项目访问404问题解决
Jun 01 Javascript
WEEX环境搭建与入门详解
Oct 16 Javascript
vue请求服务器数据后绑定不上的解决方法
Oct 30 Javascript
javascript数组的定义及操作实例
Nov 10 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日历[测试通过]
2008/03/27 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
2012/02/27 PHP
php使用qr生成二维码的示例分享
2014/01/20 PHP
Drupal7连接多个数据库及常见问题解决
2014/03/02 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
javascript中动态加载js文件多种解决办法总结
2013/11/15 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
2017/09/29 NodeJs
浅谈node中的cluster集群
2018/06/02 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
2018/12/12 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
使用Python对SQLite数据库操作
2017/04/06 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
python  logging日志打印过程解析
2019/10/22 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
医务工作者先进事迹材料
2014/01/26 职场文书
学习雷锋倡议书
2014/04/15 职场文书
怀念母亲教学反思
2014/04/28 职场文书
义和团口号
2014/06/17 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书