vue服务端渲染(SSR)初探

作者: ITgecko | 来源:发表于2017-06-17 17:46 被阅读6384次

前言

首先来讲一下服务端渲染,直白的说就是在服务端拿数据进行解析渲染,直接生成html片段返回给前端。具体用法也有很多种比如:

  • 传统的服务端模板引擎渲染整个页面
  • 服务渲染生成htmll代码块, 前端 AJAX 获取然后js动态添加

服务端渲染的优劣

首先是seo问题,前端动态渲染的内容是不能被抓取到的,而使用服务端渲染就可以解决这个问题。还有就是首屏加载过慢这种问题,比如在SPA中,打开首页需要初始加载很多资源,这时考虑在首屏使用服务端渲染,也是一种折中的优化方案。但是使用SSR时,势必会增加服务器的压力,还有可能会需要前后端同构,使用同样的模板引擎,这似乎与前后端分离的观点又是矛盾的。废话就说到这里,下面来看一下vue框架中的服务器渲染。

vue-server-renderer

vue-server-renderer就是vue中处理服务端加载的一个模块了,官方文档:https://ssr.vuejs.org/en/,暂时没有中文版的,我也只是稍微看了一些,然后写了一个简单的demo。首先新建一个test.js文件,并用npm安装依赖express、vue、vue-server-renderer。引入vue-server-renderer之后,然后新建一个temp.html作为渲染的基本模板,用createRenderer方法新建一个render实例,这里我传入temp.html作为renderer的template的参数,在后面渲染时就会以这个temp.html作为基础模板。

const renderer = require('vue-server-renderer').createRenderer({
    template: require('fs').readFileSync('./temp.html', 'utf-8')
})

temp.html:

<!DOCTYPE html><br><html lang="en"><br><head><title>{{title}}</title></head>
  <body>
    <!--vue-ssr-outlet-->
  </body>
</html>

接下来随便定义一些渲染用的数据,然后用express新建一个node服务器,再定义一个vue的实例。然后再调用renderer的renderToString方法来渲染生成html,渲染成功后返回给客户端。

const Vue = require('vue')
const server = require('express')()
const context = {
  title: 'hello'
}
const mocktitle = '我爱吃的水果'
const mockdata = ['香蕉', '苹果', '橘子']
server.get('*', (req, res) => {
  const app = new Vue({
    data: {
      url: req.url,
      data: mockdata,
      title: mocktitle
    },
    template: `<div>The visited URL is: {{ url }}
    <h3>{{title}}</h3>
    <p v-for='item in data'>{{item}}</p>
    </div>`
  })
  renderer.renderToString(app, context, (err, html) => {
    if (err) {
      res.status(500).end('Internal Server Error')
      return
    }
    res.end(html)
  })
})
server.listen(8080)

注意这里渲染的数据有两种,mockdata是作为vue实例的data来渲染在实例模板中的,而context是作为基础模板的data来渲染temp.html的。可以看到在服务端用vue进行渲染的规则和前端渲染时一样,v-for、v-if等都可以正常使用。最后命令行输入node test.js,然后在浏览器打开http://localhost:8080 查看结果如下:

示例.png
可以看到服务端直接返回了一个渲染完成的Doc,示例demo到此结束。

结语

服务端渲染还是客户端渲染的问题,个人觉得还是要针对具体业务场景然后再做选择。

相关文章

  • 本期小结(二)

    vue★ vue-ssr服务端渲染简单例子 vue-ssr服务端渲染框架Nuxt.js vue2.0仿饿了么web...

  • 从壹开始前后端分离 [ Vue2.0+.NetCore2.1]

    前言 书接上文,昨天简单的说到了 SSR 服务端渲染的相关内容《二十五║初探SSR服务端渲染》,主要说明了相关概念...

  • vue服务端渲染(SSR)初探

    前言 首先来讲一下服务端渲染,直白的说就是在服务端拿数据进行解析渲染,直接生成html片段返回给前端。具体用法也有...

  • vue ssr 服务端渲染

    前几天了解了下vue 服务端渲染的流程,记录下。首先,什么是ssr(服务端渲染 Server Side Rende...

  • 2019-11-19

    VUE 服务端渲染 简介 SSR(服务端渲染)顾名思义就是将页面在服务端渲染完成后在客户端直接展示。 一. 与客户...

  • SSR介绍-1: 什么是SSR?

    什么是SSR? SSR是服务端渲染:在后台将vue实例渲染为HTML字符串直接返回,在前端激活为交互程序。 传统的...

  • Laravel-Vue-SSR-SPA 服务端渲染/单页面渲染实

    Laravel-Vue-SSR-SPA 提供服务端渲染/单页面渲染实现骨架, 同时集成webpack打包构建 MD...

  • vue 服务端渲染简介和实践

    什么是 ssr ssr , Server Side Render的简称, 服务端渲染. 首先服务端渲染并不神秘, ...

  • Vue ssr vue-server-renderer 学习

    前言 现在Vue的ssr方案,在我了解到的有如下几种: vue-server-renderer服务端渲染 prer...

  • Nuxt.js设置编译环境

    nuxt[https://www.nuxtjs.cn/guide] 是基于VUE的一款SSR(服务端渲染)框架 快...

网友评论

  • 3fff4f0c3529:求个git地址
  • 063f023f2950:有demo参考下吗?对express不熟悉
  • b8c83bace41d:按照作者写的报这样的错Content placeholder not found in template. ,请问这是什么问题啊?谢谢
  • V1admirMakarov:相比较ejs或pug,用vue同构的具体优势表现在哪里呢,组件化么?还是vue的这种语法方式
    V1admirMakarov:@ITgecko 如果是同构的话,现在不只是提供了可能性而已;https://zh.nuxtjs.org/
    ITgecko:只能说vue框架也有这种前后端同构渲染的可行性,但我们目前实际项目并没有用到,具体优缺点我也不清楚
  • 前端课堂:其实就是类似ejs或jade的渲染 换成了vue的同构

本文标题:vue服务端渲染(SSR)初探

本文链接:https://www.haomeiwen.com/subject/deiuqxtx.html