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

明明如月学长 明明如月学长     2022-10-23     630

关键词:


性能优化方法论系列目录
《一、性能优化的本质》
《二、性能优化方法论的思想源泉》
《三、性能优化的核心思想(1)》
《三、性能优化的核心思想(2)》
《三、性能优化的核心思想(3)》
《四、性能优化的注意事项》
《五、实际案例分析》
《六、总结》

4.1 避免过早优化

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

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

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


4.2 考虑其他指标

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

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

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

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

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

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


4.3 优化体验

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

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

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



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

性能优化方法论系列三性能优化的核心思想(代码片段)

...、性能优化的核心思想(3)》《四、性能优化的注意事项》《五、实际案例分析》《六、总结》3.3提高资源利用率3.3.1空间换时间空间换时间是性能优化最常用的手段之一。其中缓存 查看详情

性能优化方法论系列二性能优化方法论的思想源泉

...、性能优化的核心思想(3)》《四、性能优化的注意事项》《五、实际案例分析》《六、总结》本小节介绍自己对性能优化方法论的思想来源。1核心思想1.1开源和节流既然, 查看详情

性能优化方法论系列三性能优化的核心思想(代码片段)

...、性能优化的核心思想(3)》《四、性能优化的注意事项》《五、实际案例分析》《六、总结》3.4其他3.4.1随机读写转顺序读写随机IO读写速度和顺序IO读写速度差距较大。因此 查看详情

性能优化方法论系列五实际案例分析

...、性能优化的核心思想(3)》《四、性能优化的注意事项》《五、实际案例分析》《六、总结》5.1案例描述下面给出一个模拟的业务场景,大家可以结合上面给出的性能优化 查看详情

性能优化方法论系列三性能优化的核心思想(代码片段)

...、性能优化的核心思想(3)》《四、性能优化的注意事项》《五、实际案例分析》《六、总结》3.1增加资源3.1.1增加机器比如由单个WEB服务器来响应用户请求,改 查看详情

性能优化方法论系列一性能优化的本质(代码片段)

1性能优化的根本目的是什么?可能很多人没有认真思考过:“为什么我们需要进行性能优化?”这个问题。在我看来,性能优化是为了“解决良好的用户体验和资源的有限性之间的矛盾”。首先,我们性能优... 查看详情

性能优化方法论系列一性能优化的本质(代码片段)

1性能优化的根本目的是什么?可能很多人没有认真思考过:“为什么我们需要进行性能优化?”这个问题。在我看来,性能优化是为了“解决良好的用户体验和资源的有限性之间的矛盾”。首先,我们性能优... 查看详情

性能优化方法论系列三性能优化的核心思想(代码片段)

3.3提高资源利用率3.3.1空间换时间空间换时间是性能优化最常用的手段之一。其中缓存就是空间换时间的一种典型应用。CPU缓存、浏览器缓存、CDN缓存、DNS缓存、内存缓存、Redis缓存等,它们都是将数据缓存在离使用者更近的... 查看详情

性能优化方法论系列二性能优化方法论的思想源泉

本小节介绍自己对性能优化方法论的思想来源。1核心思想1.1开源和节流既然,性能问题是“良好的用户体验和有限的资源之间的矛盾”导致的。那么,我们如何解决这个矛盾呢?换句话说,资源不足怎么办?... 查看详情

性能优化方法论系列三性能优化的核心思想(代码片段)

3.4其他3.4.1随机读写转顺序读写随机IO读写速度和顺序IO读写速度差距较大。因此有可能的话,尽量将随机读写转为顺序读写。3.4.2就近原则前面讲到使用缓存达到空间换时间的效果。但有时候还可以采用“就近原则”,使... 查看详情

性能优化方法论系列三性能优化的核心思想(代码片段)

3.1增加资源3.1.1增加机器比如由单个WEB服务器来响应用户请求,改为通过Nginx等负载均衡工具将请求分发到多台服务器。这就相当于原本店铺里只有一个服务员,一个服务员同时只能接待5位客人,现在又多招聘几个服... 查看详情

性能优化方法论系列五实际案例分析

5.1案例描述下面给出一个模拟的业务场景,大家可以结合上面给出的性能优化核心思路,自己先设计一个性能优化的方案再和给出的方案进行对比,如果自己设计的方案更好,为你点赞;如果设计的方案没有... 查看详情

vue项目性能优化系列(代码片段)

vue项目性能优化1,优化:使用webpack-bundle-analyzer分析vue的打包js文件大小基于webpack3、vue2和vue-cli2的性能优化。所有的三方库都是打包到vendor.js文件。注意:vue-cli2创建的项目,已经集成webpack-bundle-analyzer,可以直接运行npmrunbuild--... 查看详情

抖音android性能优化系列:启动优化实践(代码片段)

组件,其初始化就是借助了一个叫ProcessLifecycleOwnerInitializer的ContentProvider进行初始化的。LifeCycle的初始化只是进行了Activity的LifecycleCallbacks的注册耗时不多,我们在逻辑层面上不需要做太多的优化。值得注意的是,如果这类用于... 查看详情

推荐:java性能优化系列集锦

Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难。随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了。现代JVM持续演进,内建了更为成熟的优... 查看详情

webpack性能优化系列-oneof(代码片段)

webpack系列文章:【Webpack性能优化系列(9)-多进程打包】极大的提升项目打包构建速度!!!【Webpack性能优化系列(8)-PWA】使用渐进式网络应用程序为我们的项目添加离线体验【Webpack性能优化系列(7)-懒加载和预加载... 查看详情

spark系列(代码片段)

...《Java并发编程》,《Spring核心知识》《Docker教程》和《JVM性能优化》,都是多年面试总结。欢迎关注【后端精进之路】,轻松阅读全部文章。Java并发编程:Java并发编程系列-(1)并发编程基础Java并发编程系列-(2)线程的并发工具类Ja... 查看详情

spark系列(代码片段)

目前已经更新完《Java并发编程》,《JVM性能优化》,《Spring核心知识》《Docker教程》和《Spark基础知识》,都是多年面试总结。欢迎关注【后端精进之路】,轻松阅读全部文章。Java并发编程:Java并发编程系列-(1)并发编程基础Java并... 查看详情