详解vue服务端渲染(SSR)初探
首先来讲一下服务端渲染,直白的说就是在服务端拿数据进行解析渲染,直接生成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 查看结果如下:
可以看到服务端直接返回了一个渲染完成的Doc,示例demo到此结束。
结语
服务端渲染还是客户端渲染的问题,个人觉得还是要针对具体业务场景然后再做选择。然后作为前端我对服务端的东西了解的也不是很多,上面说的如果有不对的地方,欢迎指正拍砖。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- 基于vue-ssr服务端渲染入门详解
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十五║初探SSR服务端渲染(个人博客二)
- 详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
- 使用 PHP 来做 Vue.js 的 SSR 服务端渲染
- 详解基于 Nuxt 的 Vue.js 服务端渲染实践
- Vue 服务端渲染(SSR)
- 前端框架Vue(17)——基于 Vue.js 的服务端渲染 (ssr) 通用应用框架 Nuxt.js
- vue服务端渲染页面缓存和组件缓存的实例详解
- vue服务端渲染缓存应用详解
- 详解React+Koa实现服务端渲染(SSR)
- 追求极致的用户体验ssr(基于vue的服务端渲染)
- 详解Nuxt.js Vue服务端渲染摸索
- 详解基于vue的服务端渲染框架NUXT
- Vue列表页渲染优化详解
- vue服务端渲染添加缓存的方法
- 详解Vue改变数组中对象的属性不重新渲染View的解决方案
- Vue服务端渲染和Vue浏览器端渲染的性能对比
- Vue服务端渲染 VS Vue浏览器端渲染)
- 基于Vue渲染与插件的加载顺序的问题详解
- Vue监听数据渲染DOM完以后执行某个函数详解