详解vue服务端渲染(SSR)初探


Posted in Javascript onJune 19, 2017

前言

首先来讲一下服务端渲染,直白的说就是在服务端拿数据进行解析渲染,直接生成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>
<html lang="en">
<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 查看结果如下:

详解vue服务端渲染(SSR)初探

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

结语

服务端渲染还是客户端渲染的问题,个人觉得还是要针对具体业务场景然后再做选择。然后作为前端我对服务端的东西了解的也不是很多,上面说的如果有不对的地方,欢迎指正拍砖。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
精通JavaScript 纠正 cleanWhitespace函数
Mar 11 Javascript
检测input每次的输入是否合法遇到汉字输入就有问题
May 23 Javascript
与Math.pow 相反的函数使用介绍
Aug 04 Javascript
javascript框架设计读书笔记之数组的扩展与修复
Dec 02 Javascript
js实现用户注册协议倒计时的方法
Jan 21 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
Oct 28 Javascript
使用three.js 画渐变的直线
Jun 05 Javascript
jQuery validate 验证radio实例
Mar 01 Javascript
jquery 禁止鼠标右键并监听右键事件
Apr 27 jQuery
vue history 模式打包部署在域名的二级目录的配置指南
Jul 02 Javascript
layui table单元格事件修改值的方法
Sep 24 Javascript
为什么node.js不适合大型项目
Apr 28 Javascript
jQuery实现简单的手风琴效果
Apr 17 #jQuery
原生JS+Canvas实现五子棋游戏实例
Jun 19 #Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
Jun 19 #Javascript
Node.js中 __dirname 的使用介绍
Jun 19 #Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
Jun 19 #Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
Jun 19 #Javascript
jQuery自定义多选下拉框效果
Jun 19 #jQuery
You might like
php DOS攻击实现代码(附如何防范)
2012/05/29 PHP
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
JsRender for object语法简介
2014/10/31 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
Bootstrap插件全集
2016/07/18 Javascript
jQuery实现弹出窗口弹出div层的实例代码
2017/01/09 Javascript
Vuex之理解Getters的用法实例
2017/04/19 Javascript
javascript+html5+css3自定义提示窗口
2017/06/21 Javascript
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
Python重新引入被覆盖的自带function
2014/07/16 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
python中的字典操作及字典函数
2018/01/03 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
详解Python3的TFTP文件传输
2018/06/26 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
汉森批发:Hansen Wholesale
2018/05/24 全球购物
学年末自我鉴定
2014/01/21 职场文书
暑假家长评语大全
2014/04/17 职场文书
小学生植树节活动总结
2014/07/04 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
师德标兵事迹材料
2014/12/19 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
js中Object.create实例用法详解
2021/10/05 Javascript