本文主要是从三个方面学习服务端渲染
服务端渲染是什么?什么是服务端渲染?(服务端渲染的运行机制)
为什么使用服务端渲染?服务端渲染解决了什么问题?
什么情况下使用服务端渲染?(服务端渲染的应用实例与使用场景)
一、概念
首先,在说服务端渲染之前我们先对渲染这个概念有一个大概的了解。
渲染:就是将数据和模板组装成html
客户端渲染(CSR)VS服务端渲染(SSR)
1、客户端渲染
1.1 概念
解释一:客户端渲染模式下,服务端把渲染的静态文件给到客户端,客户端拿到服务端发送过来的文件自己跑一遍js,根据JS运行结果,生成相应DOM,然后渲染给用户
解释二:html仅仅作为静态文件,客户端在请求时,服务端不做任何处理,直接以原文件的形式返回给客户端,然后根据html上的JavaScript,生成DOM插入html。
延伸:前端渲染的方式起源于JavaScript的兴起,ajax的大热更是让前端渲染更加成熟,前端渲染真正意义上的实现了前后端分离,前端只专注于UI的开发,后端只专注于逻辑的开发,前后端交互只通过约定好的API来交互,后端提供json数据,前端循环json生成DOM插入到页面中去。
1.2 利弊
好处:网络传输数据量小、减少了服务端压力、前后端分离、局部刷新、无需每次请求完整页面、交互好可实现各种效果。
坏处:不利于SEO、爬虫看不到完整的程序源码、首屏渲染慢(渲染前需要下载一堆js和css等)
2.服务端渲染
2.1 概念
解释一:服务端在返回html之前,在特定的区域,符号里用数据填充,再给客户端,客户端只负责解析HTML。
解释二:服务端渲染的模式下,当用户第一次请求页面时,由服务端把需要的组件或页面渲染成HTML字符串,然后把它返回给客户端。客户端拿到手的,是可以直接渲染然后呈现给用户的HTML内容,不需要为了成为DOM内容自己再去跑一遍JS代码。使用服务端渲染的网站,可以说是‘所见即所得’,页面上呈现的内容,我们在html源文件里也能找到。
2.2利弊
好处:首屏渲染快、利于SEO、可以生成缓存片段,生成静态化文件、节能(对比客户端渲染的耗电)
坏处:用户体验较差、不容易维护,通常前端改了部分html或者css,后端也需要修改。
3、对比
其实前后端的渲染本质是一样的,都是字符串的拼接,将数据渲染进一些固定格式的html代码中形成最终的html展示在用户页面上。因为字符串的拼接必然会损耗一些性能资源。
如果在服务端渲染,那么消耗的就是server端的性能。
如果是在客户端渲染,常见的手段,比如是直接生成DOM插入到html中,或者是使用一些前端的模块引擎等。他们初次渲染的原理大多数是将原html中的数据标记替换。
二、为什么使用服务端渲染,它解决的是什么问题
简单总结起来就是两点:
首屏加载快
相比于加载单页应用,我只需要加载当前内容的内容,而不需要像React或者Vue一样加载全部的js文件
SEO优化
对于单页应用,搜索引擎并不能收录到ajax爬取数据之后然后再动态js渲染出来的页面。
三、什么情况下使用服务端渲染?
通过服务端渲染的概念以及它的两个特点:首屏在家速度快、SEO优化。
服务端渲染其实就是由浏览器做的一些事情,我们放到了服务端去做,那么对于掘金、简书、CSDN、知乎等网站的搭建,这种在网上一搜搜出一堆东西的网站。SEO做的很好,应该多少都用到服务端渲染了吧?当然,做服务端渲染成本是高昂的。
vue全家桶或者react全家桶,都是推荐通过服务端渲染来实现路由的。
服务端渲染并非完全之策,关于首屏渲染体验以及SEO的优化方案很多,在不使用服务端渲染这个操作下,我们最好的处理方式就是找替代优化方案。
关于在server端还是在browser端渲染的选择,更多的是要看业务场景。