服务器端渲染和客户端渲染

什么是服务器端渲染和客户端渲染?

    互联网早期,用户使用浏览器浏览的都是一些没有复杂逻辑的、简单的页面,这些页面都是在后端将html拼接好的而后将之返回给前端完整的html文件,浏览器拿到这个html文件以后就能够直接解析展现了,而这也就是所谓的服务器端渲染了。而随着前端页面的复杂性提升,前端就不只仅是普通的页面展现了,而可能添加了更多功能性的组件,复杂性更大,另外,彼时ajax的兴起,使得业界就开始推崇先后端分离的开发模式,即后端不提供完整的html页面,而是提供一些api使得前端能够获取到json数据,而后前端拿到json数据以后再在前端进行html页面的拼接,而后展现在浏览器上,这就是所谓的客户端渲染了,这样前端就能够专一UI的开发,后端专一于逻辑的开发。css

  

二者本质的区别是什么?

  客户端渲染和服务器端渲染的最重要的区别就是到底是谁来完成html文件的完整拼接,若是是在服务器端完成的,而后返回给客户端,就是服务器端渲染,而若是是前端作了更多的工做完成了html的拼接,则就是客户端渲染。html

 

服务器端渲染的优缺点是怎样的?

优势:

  1. 前端耗时少。由于后端拼接完了html,浏览器只须要直接渲染出来
  2. 有利于SEO。由于在后端有完整的html页面,因此爬虫更容易爬取得到信息,更有利于seo。
  3. 无需占用客户端资源。即解析模板的工做彻底交由后端来作,客户端只要解析标准的html页面便可,这样对于客户端的资源占用更少,尤为是移动端,也能够更省电。
  4. 后端生成静态化文件。即生成缓存片断,这样就能够减小数据库查询浪费的时间了,且对于数据变化不大的页面很是高效 。

缺点:前端

  1. 不利于先后端分离,开发效率低。使用服务器端渲染,则没法进行分工合做,则对于前端复杂度高的项目,不利于项目高效开发。另外,若是是服务器端渲染,则前端通常就是写一个静态html文件,而后后端再修改成模板,这样是很是低效的,而且还经常须要先后端共同完成修改的动做; 或者是前端直接完成html模板,而后交由后端。另外,若是后端改了模板,前端还须要根据改动的模板再调节css,这样使得先后端联调的时间增长。
  2. 占用服务器端资源。即服务器端完成html模板的解析,若是请求较多,会对服务器形成必定的访问压力。而若是使用前端渲染,就是把这些解析的压力分摊了前端,而这里确实彻底交给了一个服务器。

 

客户端渲染的优缺点是怎样的?

优势:  

  1. 先后端分离。前端专一于前端UI,后端专一于api开发,且前端有更多的选择性,而不须要遵循后端特定的模板。
  2. 体验更好。好比,咱们将网站作成SPA或者部份内容作成SPA,这样,尤为是移动端,可使体验更接近于原生app。

缺点:

  1. 前端响应较慢。若是是客户端渲染,前端还要进行拼接字符串的过程,须要耗费额外的时间,不如服务器端渲染速度快。
  2. 不利于SEO。目前好比百度、谷歌的爬虫对于SPA都是不认的,只是记录了一个页面,因此SEO不好。由于服务器端可能没有保存完整的html,而是前端经过js进行dom的拼接,那么爬虫没法爬取信息。 除非搜索引擎的seo能够增长对于JavaScript的爬取能力,这才能保证seo。

 

 

使用服务器端渲染仍是客户端渲染?

  不谈业务场景而盲目选择使用何种渲染方式都是耍流氓。好比企业级网站,主要功能是展现没有复杂的交互,而且须要良好的SEO,则这时咱们就须要使用服务器端渲染;而相似后台管理页面,交互性比较强,不须要seo的考虑,那么就可使用客户端渲染。vue

  另外,具体使用何种渲染方法并非绝对的,好比如今一些网站采用了首屏服务器端渲染,即对于用户最开始打开的那个页面采用的是服务器端渲染,这样就保证了渲染速度,而其余的页面采用客户端渲染,这样就完成了先后端分离。react

 

 

对于先后端分离,若是进行seo优化?

  若是进行了先后端分离,那么前端就是经过js来修改dom使得html拼接彻底,而后再显示,或者是使用SPA,这样,seo几乎没有。那么这种状况下如何作seo优化呢?webpack

  咱们能够自行提交sitemap让蜘蛛主动去爬取,可是遇到了sitemap中的url,达到指定页面以后只有元js怎么办呢?这是咱们可使用<noscript>标签来进行简单的优化,好比打印出当前页面信息的一些关键的信息点,可是正经常使用户并不须要这些,会形成额外的负担,且前端能够判断是否支持JavaScript,然后段不行,只好根据百度的spider作UA判断,使用phantomjs或者nginx代理,来对spider访问的页面进行特殊的处理,达到被收录的效果。但这种效果仍是很差。。。nginx

  而目前的react和vue都提供了SSR,即服务器端渲染,这也就是提供seo很差的解决方式了。web

 

 

 

究竟如何理解先后端分离?

  实际上,时至今日,先后端分离必定是必然或者趋势,由于早期在web1.0时代的网页就是简单的网页,而现在的网页愈来愈朝向app前进,而先后端分离就是实现app的必然的结果。因此,咱们能够认为html、css、JavaScript组成了这个app,而后浏览器做为虚拟机来运行这些程序,即浏览器成为了app的运行环境,成了客户端,总的来讲就是当前的前端愈来愈朝向桌面应用或者说是手机上的app发展了,而好比说电脑上的qq能够服务器端渲染吗?确定不能!因此先后端分离也就成了必然。而咱们目前接触额前端工程化、编译(转译)、各类MVC/MVVM框架、依赖工具、npm、bable、webpack等等看似很新鲜、创新的东西实际上都是传动桌面开发所造成的概念,只是近年来前端发展较快而借鉴过来的,本质上就是开源社区东平西凑作出来的一个visual studio。ajax

相关文章
相关标签/搜索