从输入 Url 到页面渲染的不同阶段给出优化建议

开发 前端
在服务端生成HTML网页的DOM元素,客户端(浏览器)只负责显示DOM元素内容。这有利于SEO,因为网站通过href的url将搜索引擎直接引到服务端,服务端提供优质的网页内容给搜索引擎。

页面渲染机制

页面渲染机制是浏览器将HTML、CSS和JavaScript等代码转换为可视化页面的过程。以下是页面渲染的主要步骤:

HTML解析:浏览器首先接收HTML文件,然后对其进行解析,创建一个叫做DOM(Document Object Model)的数据结构。DOM是HTML元素的树形表示,它能够让JavaScript和CSS访问和操作页面的内容。

CSS解析:同时,浏览器也会解析CSS文件,生成另一个数据结构,称为CSSOM(CSS Object Model)。CSSOM包含了所有样式信息,如颜色、布局等。

渲染树构建:浏览器会将DOM和CSSOM结合起来,创建一个渲染树(Render Tree)。渲染树包含了所有需要显示在页面上的DOM节点和这些节点的样式信息。这个过程会忽略那些对渲染没有影响的节点,如script标签、meta标签等。

布局(Layout):也被称为“重排”或“回流”,这个阶段是计算渲染树中所有节点在最终页面上的位置和大小。浏览器会遍历渲染树,为每个节点分配一个应出现在屏幕上的确切坐标和大小。这个过程的结果是一个“盒模型”,它精确地描绘了每个元素在视口中的位置。

绘制(Paint):也称为“重绘”,一旦渲染树构建完毕并且布局完成后,浏览器就会开始绘制页面。浏览器UI组件会遍历渲染树并调用渲染对象的绘制(paint)方法,将内容展现在屏幕上。如果某个元素的样式发生变化,但不影响其位置或大小(例如颜色变化),那么只需要进行重绘,而不需要重新布局。

此外,还有两种主要的渲染技术:

服务端渲染(SSR):在服务端生成HTML网页的DOM元素,客户端(浏览器)只负责显示DOM元素内容。这有利于SEO,因为网站通过href的url将搜索引擎直接引到服务端,服务端提供优质的网页内容给搜索引擎。但缺点是服务端完成一部分客户端的工作,通常完成一个需求需要修改客户端和服务端的代码,开发效率低,不利于系统的稳定性。

客户端渲染:客户端(浏览器)使用AJAX向服务端发起http请求,获取到了想要的数据后,开始渲染HTML网页,生成DOM元素,并最终将网页内容展示给用户。这种方式的优点是客户端负责渲染,用户体验性好,服务端只提供数据不用关心用户界面的内容,有利于提高服务端的开发效率。适用于对SEO没有要求的系统,比如后台管理类的系统。以上就是页面渲染机制的主要步骤和两种主要的渲染技术。

渲染过程的优化

性能优化是前端不可避免的事情,毕竟谁更好用谁更快这些往往就是衡量一个产品的一方面的标准。就好像给人的第一印象。

从输入URL到页面渲染,浏览器会经历一系列的过程。以下是这些过程的主要阶段以及针对每个阶段的优化建议:

URL解析和DNS解析:浏览器首先解析输入的URL,确定要访问的域名。接着进行DNS解析,将域名转换为IP地址。 

优化:

  • 使用CDN(内容分发网络)来缓存静态资源,减少DNS解析的时间。
  • 使用DNS预解析技术,在页面加载前提前解析其他可能需要的域名。

建立TCP连接:浏览器通过TCP协议与服务器建立连接。 

优化:

  • 使用HTTP/2协议,它支持多路复用,可以在一个TCP连接上同时发送多个请求,提高传输效率。
  • 使用HTTPS协议,虽然会增加一定的开销,但可以提高网站的安全性,并有助于提升搜索引擎排名。

发送HTTP请求:浏览器向服务器发送HTTP请求,请求页面内容。 

优化:

  • 合并和压缩请求,减少请求的数量和大小,降低网络传输的负载。
  • 使用缓存头(如ETag、Last-Modified等)来缓存页面内容,避免不必要的请求。

服务器处理和响应:服务器接收到请求后,处理请求并生成响应内容。 

优化:

  • 优化服务器端的代码和数据库查询,提高响应速度。
  • 使用服务器端的缓存技术(如Redis等)来缓存频繁访问的数据,降低数据库压力。

浏览器接收和解析HTML:浏览器接收到HTML文档后,开始解析HTML并构建DOM树。 

优化:

  • 使用异步加载技术(如异步JavaScript和CSS)来减少阻塞渲染的时间。
  • 使用代码分割(Code Splitting)技术将代码拆分成多个包,按需加载,提高首次加载速度。

CSS解析和渲染:浏览器解析CSS样式并构建CSSOM树。将DOM树和CSSOM树合并成渲染树(Render Tree)。 

优化:

  • 精简CSS代码,删除不必要的样式和规则。
  • 使用CSS的媒体查询(Media Queries)和视口单位(Viewport Units)来实现响应式设计,提高不同设备上的显示效果。

JavaScript执行和DOM操作:浏览器执行JavaScript代码,并可能进行DOM操作。

优化:

  • 将JavaScript代码放在页面底部或使用async和defer属性来异步加载JavaScript文件,避免阻塞渲染。
  • 减少不必要的DOM操作,使用事件委托等技术来减少事件监听器的数量。
  • 使用React等现代前端框架的并发模式(Concurrent Mode)来提高渲染性能和响应性。

页面渲染:浏览器根据渲染树绘制页面内容。 

优化:

  • 使用GPU加速来提高渲染速度。
  • 优化页面布局和图片等资源的使用,减少渲染的复杂性和开销。
责任编辑:武晓燕 来源: 海燕技术栈
相关推荐

2022-01-10 08:50:13

URL前端页面

2016-09-18 17:27:06

2017-09-22 13:24:20

2020-01-10 08:54:24

URLDNSTCP

2018-04-27 14:55:53

WeburlDNS域名解析

2017-04-11 13:54:49

HTTPURLHTML

2023-10-30 23:14:57

浏览器URL网页

2017-07-23 10:30:38

CTO职责Node.JS

2022-04-28 07:52:05

HTTP浏览器

2023-03-22 18:31:10

Android页面优化

2013-11-18 15:09:34

浏览器渲染速度

2018-01-19 14:39:53

浏览器页面优化

2017-04-25 16:20:10

页面优化滚动优化

2009-07-17 08:58:25

IT运维网管软件游龙科技

2010-07-06 10:11:25

浏览器

2022-08-29 07:11:05

业务数据模板

2020-12-28 08:10:26

HTTPTCPIP

2023-03-19 17:36:38

2021-08-04 07:57:17

C++多线程算法

2023-03-22 11:41:56

点赞
收藏

51CTO技术栈公众号