ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 1. 何为渲染? 页面上的数据要发生更新,就是渲染。 * 这个工作放在服务器进行就是服务器渲染,放在浏览器进行就是浏览器渲染。 服务器端渲染,指的是后台语言通过一些模板引擎生成 html。 浏览器端渲染,指的是用 js 去生成 html,前端做路由。 * 客户端渲染和服务器端渲染的最重要的区别就是究竟是谁来完成html文件的完整拼接,如果是在服务器端完成的,然后返回给客户端,就是服务器端渲染,而如果是前端做了更多的工作完成了html的拼接,则就是客户端渲染。 2. 浏览器端渲染路线: 请求一个 html。 服务端返回一个 html。 浏览器下载 html 里面的 js/css 文件。 等待 js 文件下载完成。 等待 js 加载并初始化完成。 由 js 代码向后端请求数据(ajax/fetch)。 等待后端数据返回。 客户端从无到完整地,把数据渲染为响应页面。  3. 服务端渲染路线: 请求一个 html。 服务端请求数据 服务器初始渲染。 服务端返回已经有正确内容的页面。 客户端请求 js/css 文件。 等待 js 文件下载完成。 等待 js 加载并初始化完成。 客户端把剩下一部分渲染完成。 ##### 服务器端渲染的优缺点是? **优点:** 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的考虑,那么就可以使用客户端渲染。 另外,具体使用何种渲染方法并不是绝对的,比如现在一些网站采用了首屏服务器端渲染,即对于用户最开始打开的那个页面采用的是服务器端渲染,这样就保证了渲染速度,而其他的页面采用客户端渲染,这样就完成了前后端分离。