如何进行WEB性能优化
- 首先需要了解性能指标-多快才算快?
- 使用专业的工具可量化地评估出网站或应用的性能表现;
- 然后立足于网站页面响应的生命周期,分析出造成较差性能表现的原因;
- 最后进行技术改造、可行性分析等具体的优化实施。
- 迭代优化
WEB性能指标
RAIL性能模型
- 响应(react
- 动画(animation
- 空闲(idle
- 加载(load
具体指标方案(基于用户体验的性能指标)
- FCP(first contentful paint)
- 首次内容绘制(白屏时间)
- LCP(largest contentful paint)
- 最大内容绘制
- FID(first input delay)
- 首次输入延迟
- TTI(time to interactive)
- 网页完全达到可交互
- TBT(total block time)
- 总阻塞时间
- CLS(cumulative layout shift)
- 累计布局偏移
WEB VITALS
简化指标
- LCP(largest contentful paint)
- 最大内容绘制
- FID(first input delay)
- 首次输入延迟
- CLS(cumulative layout shift)
- 累计布局偏移
WEB性能测试
工具
- lighthouse
- webpagetest
- 支持多地点,多浏览器测试
- DevTools(*****)
前端页面生命周期

- 从发出请求到收到响应的优化,比如DNS查询、HTTP长连接、HTTP 2、HTTP压缩、HTTP缓存等。
- 关键渲染路径优化,比如是否存在不必要的重绘和回流。
- 加载过程的优化,比如延迟加载,是否有不需要在首屏展示的非关键信息,占用了页面加载的时间。
- 资源优化,比如图片、视频等不同的格式类型会有不同的使用场景,在使用的过程中是否恰当。
- 构建优化,比如压缩合并、基于webpack构建优化方案等。
-
浏览器接收到URL,到网络请求线程的开启
-
进程与线程

-
进程所占用的资源会在关闭后由操作系统回收,既是进程中存在某个线程的内存泄漏,进程退出时相关资源也会被回收
-
线程出错整个进程将会崩溃,进程与进程之间相互隔离,一个进程崩溃不会影响其他
-
线程之间可以共享所属进程的数据,进程只能访问分配给自己的资源(会通过IPC进行通讯)
-
-
浏览器进程

- 渲染进程:每个页面都创建了一个渲染进程
- JS引擎线程
- GUI渲染线程
- 事件触发线程
- 定时器触发线程
- 异步HTTP请求线程
- 渲染进程:每个页面都创建了一个渲染进程
-
-
建立TCP连接
-
建立TCP连接
- DNS解析
- 通信链路的建立
- DNS解析
-
TCP连接
- 三次握手
-
-
发送HTTP请求
- http1的长连接
- 优点:只连接一次TCP就可以进行多次http通信(复用TCP链接)
- 缺点:对多个请求(并发请求),服务器只能按顺序一一对应,前边回应慢,造成队头堵塞
- HTTP2(多服二头)
- 多路复用:复用TCP链接,在一个链接里,客户端和浏览器可以同时发送多个请求或回应,不用按顺序一一对应,避免了队头堵塞。
- 服务器推送:允许未经服务器请求主动向客户端发送资源。
-
二进制分帧:HTTP/2 采用二进制格式传输数据,而非 HTTP 1.x 的文本格式,二进制协议解析起来更高效。
-
头部压缩:HTTP/2对消息头采用HPACK(专为http/2头部设计的压缩格式)进行压缩传输,能够节省消息头占用的网络的流量。
- HTTP缓存
- 协商缓存
- 在使用本地缓存之前,向服务器发送一次GET请求,与之协商本地缓存是否已经过期
- 强制缓存(res.setHeader('cache control'))
- 如果浏览器判断请求的资源有效命中,则可以直接从强制缓存中返回请求响应,无需与服务器进行任何通信
- 协商缓存
- http1的长连接
-
服务器处理
-
关闭TCP连接
- 四次握手
-
浏览器解析数据包,关键渲染路径(CRP)
- 构建对象模型
- DOM树 和CSSOM树
- 合成Render Tree
- 构建对象模型
-
游览器布局渲染
-
根据渲染树布局,计算CSS样式,即每个节点在页面中的大小和位置等几何信息。HTML默认是流式布局的,CSS和js会打破这种布局,改变DOM的外观样式以及大小和位置。

-
WEB性能优化(加载上,运行上)
-
加载时
-
服务器通信层面
- 减少HTTP请求
- 资源合并(如雪碧图)
- 使用CDN
- 使用服务端渲染
- 客户端渲染经历流程:获取HTML文件 – 按需要再获取JS文件 – 运行文件 – 生成DOM – 将DOM插入HTML中 – 最后再渲染页面。
- 服务端渲染流程:只要获取识别解析HTML文件即可。而且服务端渲染还能有效增强站点的SEO。
- 减少HTTP请求
-
数据传输层面
- 缓存
- 协商缓存
- 强缓存
- 压缩
- 数据压缩(如GZIP)
- 代码文件压缩:删去注释,空格,长变量
- 静态资源:字体图标、去除元数据、使用jpg或webp格式、缩小尺寸及分辨率
- 头与报文
- HTTP减少不必要的头
- 减少cookie数据量
- 懒加载
- 缓存
-
代码层面
- 图片压缩
- css写头部,js写底部
- 能用HTML/CSS实现的效果就不用JS
- 减少作用域查找和闭包,避免==,使用块级作用域
- 使用flexbox弹性布局
- 使用transform实现动画
-
-
运行时
- 优化关键渲染路径,减少回流和重绘
- 使用事件委托
- 防抖和节流

4108

被折叠的 条评论
为什么被折叠?



