目录
- 前言
- 建立性能优化体系
- 设定性能关键指标
- 收益评估
- 性能立项
- 结束语
- 题外话
前言
性能优化简简单单四个字,但是涉及了方方面面。做性能优化不止是做技术,还有很多技术之外的事情。我们经常在知乎、掘金等等平台上看到很多性能优化的帖子。请注意并不是说这些帖子不好,当然他们写的很好,但是做性能优化真的就是只需要知道有多少种优化策略,有多少种优化技巧吗?这些技巧或者策略短期看来是很有用的,但是长期来看这远远不够。
再次声明文章是作者的胡思乱想,如有意见我们可以一起讨论,相互学习,相互成长。请轻一点喷😆
1. 建立性能优化体系
作为前端工程师,你懂的,前端性能优化一般比较琐碎、繁杂、麻烦,那怎么把琐碎、繁杂、麻烦的工作系统化呢?答案也就是你需要建立一套性能优化体系。当然这套优化体系是作者本人学习的性能优化体系,你也可以有自己的性能优化体系,这体系对不同的人、不同的系统、不同的公司都会存在千差万别。
2. 设定性能关键指标
进行性能优化,你就要确定它的指标,然后才能根据指标去采取措施,否则就会像无头苍蝇一样乱撞,没有执行目标。
这里列举一些网络上常见的关键指标,先声明指标不是唯一的,他在不同的业务场景可能不一样。段落中列举的指标不是唯一也不是标准,只是为了距离说明。
1. 视觉稳定性指标
我们叫它 CLS(Cumulative Layout Shift),也就是布局偏移量,它是指页面从一帧切换到另外一帧时,视线中不稳定元素的偏移情况。关于CLS,这里有一篇文章有兴趣的同学可以看看。地址
2. 白屏时间指标
什么叫白屏时间呢?它指的是从输入内容回车(包括刷新、跳转等方式)后,到页面开始出现第一个字符的时间。这个过程包括 DNS 查询,建立 TCP 连接,发送首个HTTP请求(如果使用HTTPS还要介入 TLS 的验证时间),返回HTML文档,HTML文档 Head 解析完毕。它的标准时间是 300ms。
3. 首屏时间指标
首屏时间=白屏时间+渲染时间。它是指从浏览器输入地址并回车后,到首屏内容渲染完毕的时间。这期间不需要滚动鼠标或者下拉页面,否则无效。首屏时间我们经常会听到一个词秒开,但是这个秒开也是有针对性的,如你在移动端秒开无可厚非,但如果你要求一个 PC 管理后台做到秒开应该也没有什么必要。
4. 交互指标
交互方面,有的公司用 FID 指标 (First Input Delay,首次输入延迟), 指标必须尽量小于 100ms,如果过长会给人页面卡顿的感觉。还有的公司使用 PSI(Perceptual Speed Index,视觉变化率),衡量标准是小于20%。
5. 相应时间指标
响应时间是衡量系统性能的重要指标之一,响应时间越短,性能越好,一般一个接口的响应时间是在毫秒级。
- 数据库响应时间:数据库操作所消耗的时间,往往是整个请求链中最耗时的;
- 服务端响应时间:服务端包括 Nginx 分发的请求所消耗的时间以及服务端程序执行所消耗的时间;
- 网络响应时间:这是网络传输时,网络硬件需要对传输的请求进行解析等操作所消耗的时间;
3. 收益评估
收益评估之前我做性能优化的时候,本身没有他在意,但是经历过面试官的毒打之后,我开始意识到这一点。如果仅仅判断性能指标是否优化到位还好,但很多时候,为了让产品同学感觉我们是为产品服务,而不是又在造轮子,我们还需要关联产品目标进行收益评估。比如,列表页到详情页的转化率能不能提升?用户跳出率可不可降低?优化能为公司带来多少收益?这一切都需要做评估。如果你费心费力做了半个月的优化,最后发现没有任何的价值,不能带来价值和收益,也不会得到认可。也许你会说我自己得到了技术提升,我自己很自豪,但是作为过来人很想说一句,这是资本家的时代。
4. 性能立项
性能立项就是通过成立一个项目组,用项目化的运作方式来解决性能问题。整个立项流程包括团队成员确定、技术调研开展、项目目标制定、获取业务侧支持、项目名字选定,需求范围和优先级确定等过程。
不知道你有没有发现,这个立项不是先定需求范围和优先级,然后再制定项目目标和成立项目团队。为什么呢?因为这个性能优化项目,是探索性的项目需求。探索性项目需求,有别于日常的业务项目。业务项目一般都有明确的项目目标和需求修改范围。比如,提升首页到列表页的转户率。这个项目,需求文档和 UI 图会给出具体模块修改点、样式、内容等,前端开发完成后,产品和 UI 进行验收即可。而探索性项目需求,目标不确定,一般需要先选定项目团队,做完技术调研,才能确定出项目目标。因为探索性项目需求中的项目目标制定、获取业务侧支持、项目立项时机这三点和常规项目不太一样。
结束语
如果文章中什么不对或者写的不好的地方,请大家多多指正,谢谢!码字不易,点个赞加个关注吧!
题外话
笔者在「深圳虾皮」,一家口碑还不错的东南亚电商公司,2021大量招人,机会多多!快来加入我们吧!
现在有想法,还是以后有想法的同学,都可以加我微信[stone---999]!内推你加入我们的大家庭!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。