写在开头:这篇文章被我纳入博客性能优化类别,是由于我认为若是咱们要优化网站性能、提高用户体验,首要目标就是要知道用户在本地请求并加载你的网页的过程当中,到底发生了什么,在此基础上咱们才能更好的优化网页。原文发表在个人我的博客: kmknkk.xincss
图源:知乎-张秋怡html
DNS查询顺序以下,若其中一步成功则直接跳到创建连接部分:canvas
TCP三次握手(three-way handshaking)浏览器
TCP三次握手的的好处在于:发送方能够确认接收方仍然在线,不会由于白发送而浪费资源。缓存
报文首部(GET /index.html HTTP/1.1)性能优化
注意:
1.HTTP是无链接
、无状态
的,即HTTP在传输完成后就会断开(HTTP1.1之前),而且不会记录访问者的状态。服务器
从HTTP/1.1开始才默认支持持久化链接,即通讯一次之后链接不中断,HTTP/1.0须要手动设置:keep-alive。dom
正常来讲,HTTP请求、响应方式为每请求一次就响应一次:布局
请求1 -> 响应1 -> 请求2 -> 响应2 -> 请求3 -> 响应3
若采用持久链接请求管线化方式:性能
请求1 -> 请求2 -> 请求3 -> 响应1 -> 响应2 -> 响应3
使用管线化的条件:
2.关于CR(Carriage Return,回车)和LF(Line Feed,换行)
Dos和Windows采用CR/LF表示下一行
UNIX/Linux采用LF表示下一行
MAC OS系统则采用CR表示下一行
报文首部(HTTP/1.1 200 OK)
执行如下过程:
下载资源
在聊浏览器渲染以前,咱们先明确一个概念: 事实上,咱们看到的页面并非直观所见的一层图页,而是由许多DOM元素渲染层(Layers)组成的,以下图。
因此一个的页面的渲染过程由以下几步构成:
重绘(repaint)
:
reflow(重排)
:
reflow
常见状况:
display:none
,减轻绘制压力。知道了浏览器页面的渲染合成过程后,咱们不可贵出一个结论:
若是咱们把会发生大量重绘重排的元素提取出来,单独触发一个渲染层(Layer),就不会把其余元素一块儿带着重绘,这会大大提升页面性能。
那么如何触发渲染层,让GPU来加速绘制呢?最简单的方法有如下三种:
will-change: transform; will-change: opacity; transform: translateZ(0);
PS:使用Layers来触发GPU加速(硬件加速)也会带来负面影响,如电量损失过快、占用内存和GPU等。因此在使用中要注意不能滥用,在常触发重绘和重排的元素上使用便可。