首先,介绍一下 SPA、SEO、SSR 三者的区别css
- SPA(single page application) 单页面应用,是先后端分离时提出的一种解决方案。
优势:页面之间切换快;减小了服务器压力;
缺点:首屏打开速度慢,不利于 SEO 搜索引擎优。
- SEO(search engine optimization)搜索引擎优化,利用搜索引擎的规则提升网站在有关搜索引擎内的天然排名。
咱们以前说 SPA 单页面应用,经过 ajax 获取数据,这就难保证咱们的页面能被搜索引擎收到。而且有一些搜索引擎不支持的 js 和经过 ajax 获取的数据,那就更不用提 SEO 了,为解决这个问题,SSR 登场了···
- SSR (server side rendering)服务端渲染,SSR 的出现必定程度上解决了 SPA 首屏慢的问题,又极大的减小了普通 SPA 对于 SEO 的不利影响。
优势:
更快的响应时间,不用等待全部 js 都下载完成,浏览器便能显示比较完整的页面;
更好的 SSR,咱们能够将 SEO 关键信息直接在后台就渲染成 html,从而保证搜索引擎都能爬取到关键数据。
缺点:
占用更多的 CUP 和内存资源;
一些经常使用的浏览器的 api 可能没法正常使用,好比 window,document,alert等,若是使用的话须要对运行环境加以判断。
什么是服务器端渲染和客户端渲染?
互联网早期,用户使用的浏览器浏览的都是一些没有复杂逻辑的、简单的页面,这些页面都是在后端将 html 拼接好的,而后返回给前端完整的 html 文件,浏览器拿到这个 html 文件以后就能够直接解析展现了,这也就是所谓的服务器端渲染。而随着前端页面的复杂性提升,前端就不只仅是普通的页面展现了,多是添加更多功能的组件,复杂性更大,另外,此时 ajax 的兴起,使得页面就开始崇拜先后端分离的开发模式,即后端不提供完整的 html 页面,而是提供一些 api 使得前端能够获取 json 数据,而后前端拿到 json 数据以后再在前端进行 html 页面的拼接,而后展现在浏览器上,这就是所谓的客户端渲染,这样前端就能够专一 UI 的开发,后端专一与逻辑开发。html
二者本质的区别?
客户端渲染和服务器端渲染的最重要的区别就是到底是谁来完成html文件的完整拼接,若是是在服务器端完成的,而后返回给客户端,就是服务器端渲染,而若是是前端作了更多的工做完成了html的拼接,则就是客户端渲染。前端
服务器端渲染的优缺点是?
优势:ajax
- 前端耗时少。由于后端拼接完了html,浏览器只须要直接渲染出来。
- 有利于SEO。由于在后端有完整的html页面,因此爬虫更容易爬取得到信息,更有利于seo。
- 无需占用客户端资源。即解析模板的工做彻底交由后端来作,客户端只要解析标准的html页面便可,这样对于客户端的资源占用更少,尤为是移动端,也能够更省电。
- 后端生成静态化文件。即生成缓存片断,这样就能够减小数据库查询浪费的时间了,且对于数据变化不大的页面很是高效 。
缺点:数据库
- 不利于先后端分离,开发效率低。使用服务器端渲染,则没法进行分工合做,则对于前端复杂度高的项目,不利于项目高效开发。另外,若是是服务器端渲染,则前端通常就是写一个静态html文件,而后后端再修改成模板,这样是很是低效的,而且还经常须要先后端共同完成修改的动做; 或者是前端直接完成html模板,而后交由后端。另外,若是后端改了模板,前端还须要根据改动的模板再调节css,这样使得先后端联调的时间增长。
- 占用服务器端资源。即服务器端完成html模板的解析,若是请求较多,会对服务器形成必定的访问压力。而若是使用前端渲染,就是把这些解析的压力分摊了前端,而这里确实彻底交给了一个服务器。
客户端渲染的优缺点是?
优势:json
- 先后端分离。前端专一于前端UI,后端专一于api开发,且前端有更多的选择性,而不须要遵循后端特定的模板。
- 体验更好。好比,咱们将网站作成SPA或者部份内容作成SPA,这样,尤为是移动端,可使体验更接近于原生app。
缺点:后端
- 前端响应较慢。若是是客户端渲染,前端还要进行拼接字符串的过程,须要耗费额外的时间,不如服务器端渲染速度快。
- 不利于SEO。目前好比百度、谷歌的爬虫对于SPA都是不认的,只是记录了一个页面,因此SEO不好。由于服务器端可能没有保存完整的html,而是前端经过js进行dom的拼接,那么爬虫没法爬取信息。 除非搜索引擎的seo能够增长对于JavaScript的爬取能力,这才能保证seo。
使用服务器端渲染仍是客户端渲染?
不谈业务场景而盲目选择使用何种渲染方式都是耍流氓。好比企业级网站,主要功能是展现而没有复杂的交互,而且须要良好的SEO,则这时咱们就须要使用服务器端渲染;而相似后台管理页面,交互性比较强,不须要seo的考虑,那么就可使用客户端渲染。
另外,具体使用何种渲染方法并非绝对的,好比如今一些网站采用了首屏服务器端渲染,即对于用户最开始打开的那个页面采用的是服务器端渲染,这样就保证了渲染速度,而其余的页面采用客户端渲染,这样就完成了先后端分离。api