详解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 相关文章推荐
JQuery实现的在新窗口打开链接的方法小结
Apr 22 Javascript
JavaScript学习点滴 call、apply的区别
Oct 22 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
Apr 05 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
Jul 03 Javascript
任意Json转成无序列表的方法示例
Dec 09 Javascript
angular中的http拦截器Interceptors的实现
Feb 21 Javascript
vue 中filter的多种用法
Apr 26 Javascript
Next.js实现react服务器端渲染的方法示例
Jan 06 Javascript
Vue项目实现简单的权限控制管理功能
Jul 17 Javascript
layui表格内容溢出的解决方法
Sep 06 Javascript
三步实现ionic3点击退出app程序
Sep 17 Javascript
jquery实现弹窗(系统提示框)效果
Dec 10 jQuery
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函数连续调用实例分析
2015/07/30 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
php处理json格式数据经典案例总结
2016/05/19 PHP
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
javascript+mapbar实现地图定位
2010/04/09 Javascript
Jquery中dialog属性小记
2010/09/03 Javascript
jquery 插件学习(五)
2012/08/06 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
jquery 构造函数在表单提交过程中修改数据
2015/05/25 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
Angular实现跨域(搜索框的下拉列表)
2017/02/16 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
vue-cli3项目展示本地Markdown文件的方法
2019/06/07 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
Python时间获取及转换知识汇总
2017/01/11 Python
python实现装饰器、描述符
2018/02/28 Python
用python 批量更改图像尺寸到统一大小的方法
2018/03/31 Python
Python获取二维矩阵每列最大值的方法
2018/04/03 Python
详解Python sys.argv使用方法
2019/05/10 Python
pandas的qcut()方法详解
2019/07/06 Python
全球性的在线商店:Vogca
2019/05/10 全球购物
大学生旅游业创业计划书
2014/01/29 职场文书
会议邀请书范文
2014/02/02 职场文书
我有一个梦想演讲稿
2014/05/05 职场文书
企业年度评优方案
2014/06/02 职场文书
2014年节能降耗工作总结
2014/12/11 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
html解决浏览器记住密码输入框的问题
2023/05/07 HTML / CSS