互联网早期,用户使用浏览器浏览的都是一些没有复杂逻辑的、简单的页面,这些页面都是在后端将html拼接好的而后将之返回给前端完整的html文件,浏览器拿到这个html文件以后就能够直接解析展现了,而这也就是所谓的服务器端渲染了。而随着前端页面的复杂性提升,前端就不只仅是普通的页面展现了,而可能添加了更多功能性的组件,复杂性更大,另外,彼时ajax的兴起,使得业界就开始推崇先后端分离的开发模式,即后端不提供完整的html页面,而是提供一些api使得前端能够获取到json数据,而后前端拿到json数据以后再在前端进行html页面的拼接,而后展现在浏览器上,这就是所谓的客户端渲染了,这样前端就能够专一UI的开发,后端专一于逻辑的开发。css
客户端渲染和服务器端渲染的最重要的区别就是到底是谁来完成html文件的完整拼接,若是是在服务器端完成的,而后返回给客户端,就是服务器端渲染,而若是是前端作了更多的工做完成了html的拼接,则就是客户端渲染。html
缺点:前端
不谈业务场景而盲目选择使用何种渲染方式都是耍流氓。好比企业级网站,主要功能是展现而没有复杂的交互,而且须要良好的SEO,则这时咱们就须要使用服务器端渲染;而相似后台管理页面,交互性比较强,不须要seo的考虑,那么就可使用客户端渲染。vue
另外,具体使用何种渲染方法并非绝对的,好比如今一些网站采用了首屏服务器端渲染,即对于用户最开始打开的那个页面采用的是服务器端渲染,这样就保证了渲染速度,而其余的页面采用客户端渲染,这样就完成了先后端分离。react
若是进行了先后端分离,那么前端就是经过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