服务器端渲染VS浏览器端渲染

1)浏览器渲染和服务器渲染区别:
何为渲染?
若是咱们只是想显示一堆不变的数据,那么咱们直接写一个a.html丢到服务器上让客户端访问就能够了。但这是基本不可能的事情,数据通常是变化的。你不可能为每套数据写一个视图,因此咱们须要分离数据和视图,而后使用一种技术将数据塞到视图中,这种技术就叫渲染。这工做放在服务器上作就是服务器渲染,放在浏览器作就是浏览器渲染。css

这里的渲染,就是指生成html文档的过程,和浏览器渲染html没有关系。
浏览器端渲染,指的是用js去生成html,前端作路由。举例:React, Vue等等前端框架。适合单页面应用程序。
服务器端渲染,指的是用后台语言经过一些模版引擎生成html。举例:PHP文件、JSP文件、Python的Flask配合Jinja引擎、Django框架、Java配合vm模版引擎、NodeJS配合Jade。适合多页面应用。其实如今大部分网站仍是这种形式。
因此有为了让单页面应用利于SEO,让服务器和客户端同构,也使用React/Vue渲染的方案。
PS: Segmentfault也是服务端渲染。html

浏览器渲染
单页应用用的基本都是浏览器渲染。优势很明确,后端只提供数据,前端作视图和交互逻辑,分工明确。服务器只提供接口,路由以及渲染都丢给前端,服务器计算压力变轻了。可是弱点就是用户等待时间变长了,尤为在请求数多并且有必定前后顺序的时候。前端

服务器渲染
服务器接到用户请求以后,计算出用户须要的数据,而后将数据更新成视图(也就是一串dom字符)发给客户端,客户端直接将这串字符塞进页面便可。这样作的好处是响应很快,用户体验会比较好,另外对于搜索引擎来讲也是友好的,有SEO优化。nodejs层的服务器渲染,还有一个明显的好处就是前端性能优化更顺手了,可操做的空间大了。可是缺点也很明显,若是不是增长一个node层的话,先后端责任分工不明,不能很好的并行开发。另外也增长了服务器计算压力(虽然能够作渲染缓存,但毕竟是多作了计算)。node

客户端渲染路线:1. 请求一个html -> 2. 服务端返回一个html -> 3. 浏览器下载html里面的js/css文件 -> 4. 等待js文件下载完成 -> 5. 等待js加载并初始化完成 -> 6. js代码终于能够运行,由js代码向后端请求数据( ajax/fetch ) -> 7. 等待后端数据返回 -> 8. 客户端从无到完整地,把数据渲染为响应页面ajax

服务端渲染路线:2. 请求一个html -> 2. 服务端请求数据( 内网请求快 ) -> 3. 服务器初始渲染(服务端性能好,较快) -> 4. 服务端返回已经有正确内容的页面 -> 5. 客户端请求js/css文件 -> 6. 等待js文件下载完成 -> 7. 等待js加载并初始化完成 -> 8. 客户端把剩下一部分渲染完成( 内容小,渲染快 )后端

对同一个组件,服务端渲染“可视的”一部分( render/componentWillMount部分代码  ),为确保组件有完善的生命周期及事件处理,客户端须要再次渲染。即:服务端渲染,实际上也是须要客户端进行 再次地、但开销很小的二次渲染。浏览器

根据以上特色,在用户体验要求比较高的页面(首屏)、重复较多的公共页面能够考虑使用服务器渲染,减小ajax请求和提高用户体验。缓存

时间耗时比较:性能优化

  1. 数据请求:由服务端请求数据而不是客户端请求数据,这是“快”的一个主要缘由。服务端在内网进行请求,数据响应速度快。客户端在不一样网络环境进行数据请求,且外网http请求开销大,致使时间差(主要缘由)。前端框架

  2. 步骤:服务端是先请求数据而后渲染“可视”部分,而客户端是等待js代码下载、加载完成再请求数据、渲染。即:服务端渲染不用等待js代码下载完成再请求数据,并会返回一个已经有内容的页面。

  3. 渲染性能:服务端性能比客户端高,渲染速度快( 猜想,该项数据不详 )。

  4. 渲染内容:服务端渲染会把”可视“部分先渲染,而后交给客户端再做部分渲染。而客户端渲染,则是从无到有,须要经历完整的渲染步骤。    

2)PHP文件、JSP文件、Python的Flask配合Jinja引擎、Django框架、Java配合vm模版引擎、NodeJS配合Jade是服务端渲染。

3)ajax动态生成html是浏览器渲染。

相关文章
相关标签/搜索