vue服务端渲染添加缓存的方法

什么是服务器端渲染(SSR)?

Vue.js 是构建客户端应用程序的框架。默认情况下,可以在浏览器中输出 Vue 组件,进行生成 DOM 和操作 DOM。然而,也可以将同一个组件渲染为服务器端的 HTML 字符串,将它们直接发送到浏览器,最后将这些静态标记"激活"为客户端上完全可交互的应用程序。

服务器渲染的 Vue.js 应用程序也可以被认为是"同构"或"通用",因为应用程序的大部分代码都可以在服务器和客户端上运行。

缓存

虽然 Vue 的服务器端渲染(SSR)相当快速,但是由于创建组件实例和虚拟 DOM 节点的开销,无法与纯基于字符串拼接(pure string-based)的模板的性能相当。在 SSR 性能至关重要的情况下,明智地利用缓存策略,可以极大改善响应时间并减少服务器负载。

vue服务区缓存分为页面缓存、组建缓存和接口缓存

页面缓存 :

在server.js中设置

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

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中设置如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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)

 })

}

要缓存的组建

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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 返回常量将导致组件始终被缓存,这对纯静态组件是有好处的。

接口缓存:

在create-api-server.js中设置缓存

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

import qs from ‘qs‘

import axios from ‘axios‘

import md5 from ‘md5‘

import LRU from ‘lru-cache‘

const microCache = LRU({

  max: 100,

  maxAge: 5000 // 设置数据多久过期

})

export function createAPI({baseUrl, timeout}) {

let api

if (process.__API__) { api = process.__API__ } else {

// 定义全局变量 process.__API__

  api = process.__API__ = {

   get(url, params = {}) {

    const key = md5(url + JSON.stringify(params))

    // 判断是否有缓存,直接返回缓存结果

    if (params.cache && microCache.get(key)) {

     console.log(‘返回缓存‘)

     return Promise.resolve(microCache.get(key))

    }

    return new Promise((resolve, reject) => {

     axios({

      url,

      params,

      headers: {

       ‘X-Requested-With‘: ‘XMLHttpRequest‘

       // ‘Cookie‘: parseCookie(SSR.cookies)

      },

      method: ‘get‘

     }).then(res => {

      // 判断是否需要缓存 如果需要缓存缓存数据

      if (params.cache && microCache) {

       microCache.set(key, res.data)

      }

      console.log(‘返回新数据‘)

      resolve(res.data)

     }).catch(error => {

      reject(error)

     })

    })

   },

   post(url, params = {}) {

    const key = md5(url + JSON.stringify(params))

    // 判断是否有缓存,直接返回缓存结果

    if (params.cache && microCache.get(key)) {

     return Promise.resolve(microCache.get(key))

    }

    return new Promise((resolve, reject) => {

     axios({

      url,

      data: qs.stringify(params),

      method: ‘post‘,

      headers: {

       ‘X-Requested-With‘: ‘XMLHttpRequest‘,

       ‘Content-Type‘: ‘application/x-www-form-urlencoded‘

       // ‘Cookie‘: parseCookie(SSR.cookies)

      }

     }).then(res => {

      // 判断是否需要缓存 如果需要缓存缓存数据

      if (params.cache && microCache) {

       microCache.set(key, res.data)

      }

      resolve(res.data)

     }).catch(error => {

      reject(error)

     })

    })

   }

  }

 }

return api

}

Java Socket应用---通信是这样练成的    下载地址:百度网盘下载
java基础面试题精选(包含答案)    下载地址:百度网盘下载
史上最全面的JavaWeb视频教程    下载地址:百度网盘下载
传智java基础+就业班32期完整版 50G    下载地址:百度网盘下载
SpringMvc(Spring4版本)+Axure RP7.0从入门到精通 视频教程    下载地址:百度网盘下载
JavaEE就业班第168期高清不加密版 (全)视频教程 百度云网盘下载 72G    下载地址:百度网盘下载
传智播客java第33期基础班+就业班 视频教程 教学视频 百度网盘下载 55G    下载地址:百度网盘下载
传智播客上海java培训就业班 视频教程 教学视频 百度网盘下载 32G    下载地址:百度网盘下载
潭州学院大型企业内部技术 java课程 视频教程 教学视频 百度网盘下载(价值400元)    下载地址:百度网盘下载
Java零基础入门教程+就业实战全套视频教程    下载地址:百度网盘下载
北大青鸟java学士后培训视频教程全套    下载地址:百度网盘下载
传智播客.NET培训第24期 就业班 视频教程 教学视频 百度网盘下载 37G    下载地址:百度网盘下载
传智播客.NET培训 基础+就业班 视频教程 教学视频 百度网盘下载    下载地址:百度网盘下载
黑马JavaEE + Android就业班视频教程 教学视频 百度网盘下载 60G    下载地址:百度网盘下载
达内Java 菜鸟零基础学习JAVA视频教程 教学视频 百度网盘下载    下载地址:百度网盘下载
天下网校 Java教程视频 基础入门到精通 核心技术程序设计 教学视频    下载地址:百度网盘下载
web层最火框架——SpringMVC    下载地址:百度网盘下载
传智播客黑马程序员JavaEE28期就业班    下载地址:百度网盘下载
黑马程序员传智播客16期淘淘商城完整版视频教程    下载地址:百度网盘下载
2016.07.17黑马就业班32期JavaEE    下载地址:百度网盘下载

原文地址:https://www.cnblogs.com/yedda/p/9898749.html

时间: 2024-10-12 22:49:04

vue服务端渲染添加缓存的方法的相关文章

vue服务端渲染页面缓存和组件缓存的实例详解

vue缓存分为页面缓存.组建缓存.接口缓存,这里我主要说到了页面缓存和组建缓存 页面缓存: 在server.js中设置 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 const LRU = require('lru-cache') const microCache

vue服务端渲染提取css

vue服务端渲染,提取css单独打包的好处就不说了,在这里主要说的是抽取css的方法 要从 *.vue 文件中提取 CSS,可以使用 vue-loader 的 extractCSS 选项(需要 vue-loader12.0.0+) // webpack.config.js const ExtractTextPlugin = require('extract-text-webpack-plugin') // CSS 提取应该只用于生产环境 // 这样我们在开发过程中仍然可以热重载 const is

解析Nuxt.js Vue服务端渲染摸索

本篇文章主要介绍了详解Nuxt.js Vue服务端渲染摸索,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. Nuxt.js 十分简单易用.一个简单的项目只需将 nuxt 添加为依赖组件即可.Vue因其简单易懂的API.高效的数据绑定和灵活的组件系统,受到很多前端开发人员的青睐.国内很多公司都在使用vue进行项目开发,我们正在使用的简书,便是基于Vue来构建的.我们知道,SPA前端渲染存在两大痛点:(1)SEO.搜索引擎爬虫难以抓取客户端渲染的

vue服务端渲染 同构渲染

引言 自JavaScript诞生以来,前端技术发展非常迅速.移动端白屏优化是前端界面体验的一个重要优化方向,Web 前端诞生了 SSR .CSR.预渲染等技术. 十年前,几乎所有网站都使用 ASP.Java.PHP 这类做后端渲染,但后来随着 jQuery.Angular.React.Vue 等 JS 框架的崛起,开始转向了前端渲染.2014年起又兴起了同构渲染,号称是未来,集成了前后端渲染的优点,当真如此? 我们先明确三个概念: 后端渲染:后端渲染指传统的 ASP.Java 或 PHP 的渲染

Vue服务端渲染和Vue浏览器端渲染的性能对比

Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司做Vue项目的时候,一直苦于产品.客户对首屏加载要求,SEO的诉求,也想过很多解决方案,本次也是针对浏览器渲染不足之处,采用了服务端渲染,并且做了两个一样的Demo作为比较,更能直观的对比Vue前后端的渲染. talk is cheap,show us the code!话不多说,我们分别来看两个D

实例PK(Vue服务端渲染 VS Vue浏览器端渲染)

Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司做Vue项目的时候,一直苦于产品.客户对首屏加载要求,SEO的诉求,也想过很多解决方案,本次也是针对浏览器渲染不足之处,采用了服务端渲染,并且做了两个一样的Demo作为比较,更能直观的对比Vue前后端的渲染. 话不多说,我们分别来看两个Demo:(欢迎star 欢迎pull request) 1.浏

Vue.js与 ASP.NET Core 服务端渲染功能整合

http://mgyongyosi.com/2016/Vuejs-server-side-rendering-with-aspnet-core/ 原作者:Mihály Gy?ngy?si 译者:oopsguy.com 我真的很喜欢在前端使用 Vue.js,Vue 服务端渲染直到第二个版本才被支持. 在本例中,我想展示如何将 Vue.js  服务端渲染功能整合 ASP.NET Core. 我们在服务端使用了 Microsoft.AspNetCore.SpaServices 包,该包提供 ASP.N

追求极致的用户体验ssr(基于vue的服务端渲染)

首先这篇博客并不是ssr建议教程,需要ssr入门的我建议也不要搜索博客了,因为官网给出了详细的入门步骤,只需要step by step就可以了,这篇博客的意义是如何使用ssr,可能不同的人有不同的意见,我舍弃了ssr中的vuex和vue-router增加了redis,serverfetch等等实现了适合自己公司的业务,个人认为并不是所有的东西都值得吸收,对我来说我能用到的只是ssr将vue生成一个html和对应的js. 虾面我们来看看什么是服务端渲染? 官网给出的解释: Vue.js 是构建客户

使用 PHP 来做 Vue.js 的 SSR 服务端渲染

对于客户端应用来说,服务端渲染是一个热门话题.然而不幸的是,这并不是一件容易的事,尤其是对于不用 Node.js 环境开发的人来说. 我发布了两个库让 PHP 从服务端渲染成为可能.spatie/server-side-rendering 和 spatie/laravel-server-side-rendering适配 laravel 应用. 让我们一起来仔细研究一些服务端渲染的概念,权衡优缺点,然后遵循第一法则用 PHP 建立一个服务端渲染. 什么是服务端渲染 一个单页应用(通常也叫做 SPA