失业了,但不影响我谈谈【如何做性能优化】

4,430 阅读4分钟

前言

2023年一月经历了裁员,恰好赶上我的宝宝出生,找工作的事情一拖就是三个月。最近开始陆陆续续的面试,感受到了寒意。为了对抗焦虑,我开始总结自己的过往经历,梳理知识体系。我相信一切都有最好的安排。
大部分谈性能优化的文章都是罗列一些优化的方法,看起来都对,但是太多了根本记不住。所以我想试着从“道”的层面谈谈看法。

三步走

  • 第一步:看清问题
  • 第二步:确定方案
  • 第三步:过程管理

第一步:看清问题

性能优化不可能脱离场景,避免为了优化而优化。
可以尝试KT决策法帮助分析:

  1. 现状是什么?期望的结果是什么?(状况分析)
  2. 我觉着是什么原因?谁来做?什么时间做?把边界确定清楚。(问题分析)
  3. 目标是什么?尽量遵循SMART原则(决策分析)

第二步:确定方案

也可以三步走:

  • 第一步是了解整个页面生命周期中的关键路径(约等于常见的面试题:从输入url到页面渲染都经历了什么?)。
  • 第二步是通过经验或者一些工具来找到具体的问题点。
  • 第三步是确定具体方案.这里尽量避免闭门造车,多跟有经验的人沟通。避免思维被局限到某些具体的事情而做大量微优化。

1. 关键路径

这里需要我们有较多的知识储备,临时抱佛脚没用。
以web端为例,涉及到:浏览器架构、DNS、CDN、网络传输/安全、网关、ssr、后台接口等等,都是需要积累的知识。
单看浏览器架构可以参考这篇笔记

2. 诊断工具

有两类工具可以使用:

线上诊断:

大型互联网公司一般都有线上监控系统,可以统计页面LCP、FID等核心指标。小公司可以使用sentry等开源工具或者基于web-vitals库自建。
我们一般会以这些线上指标作为检验效果的依据。

线下诊断:

一般会使用Chrome控制台帮助我们定位问题,其中:

  • lighthouse面板可以页面进行整体打分,并提供优化建议。
  • performance面板可以通过录制页面提供详细的信息:包括页面截图、FCP等关键指标、线程调用堆栈、CPU开销和网络请求时间,我们应该重点关注标红的色块。小技巧:它可以模拟弱网和CPU降速。
  • 渲染面板可以帮助定位异常的回流和重绘。
  • 其他还有一些:查看网络抓包(NetWork面板)、JS代码执行覆盖率(Coverage面板)、内存快照(Memory面板)、查看页面分层(图层面板)。

3.优化的手段

之前写过性能优化笔记可以参考,但具体的手段远不止这些。实际项目中还是得根据前面的分析得出有针对性的优化手段。

第三步:做好过程管理

参考:计划 -> 行动 -> 检查 -> 纠正 -> 总结

以一个真实的项目为例聊聊

第一步看清问题:

  • 首先我们的业务有个诉求,希望我们官网的性能优于竞品。
  • 然后我对我们的网站和竟品网站做了初步调研,输出了调研报告。
  • 基于调研报告,最终确定优化的目标是:******(这个目标得到项目负责人的认可)。

第二步确定方案:

  • 结合一些工具和数据,我想出了很多优化的方案(关注投入产出比),形成报告。
  • 我把这个报告让尽可能多的人知道(我们组有写日报的习惯,日报是一个很好的推广渠道)。
  • 我会尽可能找更多的有经验的人去探讨(这里是带着我的想法和结论的,避免浪费别人的时间)。
  • 最终形成确定方案(这个方案要得到技术Leader或项目负责人的认可)。
  • 我的方案包含:分包优化、媒体资源优化、ssr层优化。

第三步过程管理:

  • 我会维护一个在线excel和一个交流群来管理项目,给相关人开权限。
  • 我会把工作拆解成可执行最小粒度放在excel中,落实到人。
  • 我会负责关键节点的检查和跟进。
  • 每周一我会进行项目的总结,包括项目进展、本周重点工作、风险等。
  • 我会利用日报、周报、周会的机会分享项目的难点,无关人员的提问往往让我发现更多问题。
  • 每次上线我会记录指标变化,不符合预期的调整方案。
  • 项目完成后我会输出成果/复盘报告。

结语

这是我对怎么做性能优化的一些认知,期望与大家探讨。