【性能优化方法论系列】四、性能优化的注意事项

198 阅读3分钟

5.1 避免过早优化

在设计性能优化方案时,要注意避免过早优化,要考虑投入产出比

在产品初期,只要性能不会特别影响用户体验,通常不需要特别关注性能问题。

可以把更多的精力投放到满足用户的核心需求,提高产品销量,让产品生存下来。

5.2 考虑其他指标

考虑性能优化的同时要注意可读性、可用性、稳定性、正确性、可拓展性、安全性等

image.png

一般来说,软件设计的原则应该优先于性能优化的原则。即不能为了性能优化而破坏软件设计的原则,给后续的拓展维护埋坑。比如设计要符合 “高内聚、弱耦合”、“封装复杂度”;比如设计模式的一些基本原则: “单一职责原则”、“迪米特法则”、“开闭原则”、“里氏替换原则”、”接口隔离原则”、“组合复用原则” 等。

在数据量不是超大的情况下,纯内存操作相对是比较快的,千万不要为了省一两次 for 循环而写出非常难以读懂的代码。

如在使用缓存来加快访问速度时,要考虑必要性。还要考虑数据库和缓存的一致性问题。

在实际工作中就遇到有同学为了提高性能,对某个看起来一定不会修改的数据加了缓存,超时时间设置好几十分钟,然而由于忽略了某个导致变更的入口,最终因缓存和实际数据不一致引发线上故障。这里有个小技巧,加缓存时一定要慎重思考缓存超期时间,如果没有太大把握,可以加个动态开关在出现问题时可以及时调整。如果没有太大把握,在能满足业务需求的情况下,尽量将超期时间设置短一些。

再比如, fastjson 虽然宣称性能很不错,但是屡屡爆出安全漏洞,给用户带来很多困扰,很多人也不会选择这个框架,这也说明性能不是全部。

5.3 优化体验

有些时候,在现有技术条件下无论怎样都很难优化到让人满意的效果时,可以想办法提升用户体验。

比如很多视频平台在视频卡顿时会增加 loading 效果;很多银行 app 转账时,会有 “等待 xx s” 的倒计时;支付宝的转账支持通过账单详情查看转账的处理进度。

Snipaste_2022-07-11_22-15-43.jpg

比如我们设计某数据导出到 excel 文件供用户下载的功能,可以在用户下载前的某个时机提前生成好,也可以参考上面的性能优化方法提高生成的速度。但如果怎么提高速度都很难在一两秒钟处理完成,如果在相对能够接受的时间内,如 10s ,能处理完成可以前端加 loading 效果,如果还需要更久的时间,即使加上 loading 用户也很难接受,则可以参考上述做法,异步查看处理进度。


创作不易,如果本文对你有帮助,欢迎点赞、收藏加关注,你的支持和鼓励,是我创作的最大动力。 在这里插入图片描述

我正在参与掘金技术社区创作者签约计划招募活动,点击链接报名投稿