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 submit ie6下失效的原因分析及解决方法
Nov 15 Javascript
jQuery实现checkbox全选的方法
Jun 10 Javascript
jquery实现右侧栏菜单选择操作
Mar 04 Javascript
jquery属性,遍历,HTML操作方法详解
Sep 17 Javascript
JS定时器用法分析【时钟与菜单中的应用】
Dec 21 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
Mar 29 Javascript
JavaScript实现自动跳转文本功能
May 25 Javascript
Vue.js项目部署到服务器的详细步骤
Jul 17 Javascript
Angularjs上传文件组件flowjs功能
Aug 07 Javascript
深入理解Angular4订阅(Subscribe)与取消
Nov 22 Javascript
微信小程序通过一个json实现分享朋友圈图片
Sep 03 Javascript
vue.js实现图书管理功能
Sep 24 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
中国收音机工业发展史
2021/03/02 无线电
php Smarty date_format [格式化时间日期]
2010/03/15 PHP
MySql数据库查询结果用表格输出PHP代码示例
2015/03/20 PHP
JavaScript函数、方法、对象代码
2008/10/29 Javascript
(function($){...})(jQuery)的意思
2010/07/22 Javascript
js实现上传图片之上传前预览图片
2013/03/25 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
JS重载实现方法分析
2016/12/16 Javascript
angular分页指令操作
2017/01/09 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
玩转vue的slot内容分发
2018/09/22 Javascript
Vue动画事件详解及过渡动画实例
2019/02/09 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
js实现点击生成随机div
2020/01/16 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
python enumerate函数的使用方法总结
2017/11/15 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
美国NBA官方商店:NBA Store
2019/04/12 全球购物
ktv收银员岗位职责
2013/12/16 职场文书
教师业务学习制度
2014/01/25 职场文书
2014学雷锋活动总结
2014/03/09 职场文书
个人贷款承诺书
2014/03/28 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
平安工地汇报材料
2014/08/19 职场文书
党员四风剖析材料
2014/08/27 职场文书
党员检讨书
2014/10/13 职场文书
师德师风培训感言
2015/08/03 职场文书
2015年成本会计工作总结
2015/10/14 职场文书
小学家庭教育心得体会
2016/01/14 职场文书
JavaScript函数柯里化
2021/11/07 Javascript