概念
简单来说就是用户第一次请求页面时,页面上的内容是通过服务器端渲染生成的,浏览器直接显示服务端返回的完整html就可以,加快首屏显示速度。
优缺点
优点:
- 更好的seo:页面服务端渲染返回给客户端的是已经获取了异步数据并执行JavaScript脚本的最终HTML,网络爬虫就可以抓取到完整页面的信息。现在比较常用的交互是页面初始展示 loading 菊花图,然后通过异步请求获取内容,但是但抓取工具并不会等待异步完成后再行抓取页面内容。
- 内容到达更快:不用等待所有的 js 都完成下载并执行,所以用户会更快速地看到完整渲染的页面。
缺点:
- 服务端压力较大,服务器渲染应用程序,尤其是高并发访问的情况,会大量占用服务端CPU资源。
- 开发成本比较高,除了对webpack、Vue要熟悉,还需要掌握node、Express相关技术。相对于客户端渲染,项目构建、部署过程更加复杂。
注意点
- 在服务端只能执行生命周期中的created和beforeCreate,原因是在服务端是无法操纵dom的,所以可想而知其他的周期也就是不能执行的了。
- 服务端渲染和客户端渲染不同,需要创建两个entry分别跑在服务端和客户端,并且需要webpack对其分别打包;
- SSR服务端请求不带cookie,需要手动拿到浏览器的cookie传给服务端的请求。实现方式戳这里 。
- SSR要求dom结构规范,因为浏览器会自动给HTML添加一些结构比如tbody,但是客户端进行混淆服务端放回的HTML时,不会添加这些标签,导致混淆后的HTML和浏览器渲染的HTML不匹配。
- 性能问题需要多加关注。vue.mixin、axios拦截请求使用不当,会内存泄漏。ru-cache向内存中缓存数据,需要合理缓存改动不频繁的资源。
具体实现看这里
针对不同前端框架方案
vue
运行在node环境下
Nuxt.js
react
运行在node环境下
Next.js