什么是服务端渲染SSR?
把Vue组件渲染为服务端的HTML字符串,将他们直接发送到浏览器,最后将静态标记 “混合” 为客户端上完全交互的应用程序。
为什么使用服务器渲染SSR?
1:更好的SEO,搜索引擎爬虫抓取工具可以直接查看完全渲染的页面
2:更快的内容到达时间 ( time - to - content )
服务端渲染做一些权衡
1:开发条件所限,Vue组件的某些生命周期钩子函数不能使用
2:开发环境
3:更多的服务器端负载,在Node.js中渲染完整的应用程序,显然会比仅仅提供静态文件的Sever 更加大量占用 CPU 资源(CPU - intensive - CPU密集),因此如果你预料在高流量环境(high - traffic)下使用,请准备相应的服务器负载,并明智的采用缓存策略。
安装所需模块
搭建服务器环境
npm i express -S
安装服务端渲染模块
npm install vue-server-renderer --save
安装vue模块
npm i vue -S
安装vue-route路由模块
npm i vue-router -S
本地 配置 4000 端口查看页面: http://localhost:4000/
查看代码结构访问:view-source:http://localhost:4000/
服务端渲染模块使用
创建rendere实例
createRenderer({
template:模版文件
})
将实例解析为模版字符串
renderer.renderToString(vm)返回一个promise对象
在模版中插入解析后的html字符串
创建新的vue实例
为每个请求创建一个新的根 Vue 实例、
在多个请求之间使用一个共享实例很容易导致交叉请求状态污染
服务端和客户端的配置
服务端配置
使用webpack的自定义插件,server bundle将生成为可传递到 bundle renderer 的特殊json文件,JSON文件记录了服务器配置的整个输出。
默认名字为:'vue-ssr-server-bundle.json'
要生成这个json文件,在配置中引入模块 vue-server-renderer/server-plugin,作为webpack的插件使用
客户端配置
客户端生成一份客户端构建清单,记录客户端的资源,最终会将客户端构建清单中记录的文件,注入到所指定的模版中
生成的这个客户端构建清单(client build manifest)
默认名字为 'vue-ssr-client-manifest.json'
要生成这个json文件,在配置中引入模块vue-server-renderer/client-plugin,作为webpack的插件使用
文件说明
webpack.server.conf.js 服务端webpack配置
dev-server.js 得到服务端bundle和客户端bundle和模版
server.js 创建后端服务
用到的模块说明
memory-fs模块
在开发阶段vue-ssr-server-bundle.json文件在webpack的作用下,是存在内存中的,所以需要用到这个模块来读取内存中的文件,和node原声fs模块有相同的API
webpack-node-externals
在服务端渲染中,所需要的文件都使用require引入,不需要把node_modules文件打包进来。