前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【性能优化方法论系列】一、性能优化的本质

【性能优化方法论系列】一、性能优化的本质

作者头像
明明如月学长
发布2022-07-12 16:27:59
6670
发布2022-07-12 16:27:59
举报

1 性能优化的根本目的是什么?

可能很多人没有认真思考过:“为什么我们需要进行性能优化?”这个问题。

在我看来,性能优化是为了“解决良好的用户体验和资源的有限性之间的矛盾”。

首先,我们性能优化一般都是追求更快的响应速度,通常最终目的是为了获得更好的用户体验。

在这里插入图片描述
在这里插入图片描述

这里所说的资源是广义上的资源,“资源的有限性”包括:资金成本的有限性,人力资源的有限性,服务器等硬件资源的有限性,时间的有限性(如为了抢占市场,希望尽早上线造成的压力)等。

如果资源是无限的,如开发周期很长,投入的人力很多,服务器资源充足,甚至服务器内存是无限大的,那么设计出来的产品可能就不需要花费太多精力去优化。

2 出现性能问题的主要原因

通常,产品发布早期由于用户量较少,不太容易出现性能问题或者通常不会太去关注性能问题;但随着业务的不断发展,性能问题就逐渐暴露出来。

在这里插入图片描述
在这里插入图片描述

导致性能问题的原因有很多,常见的原因有:

  • 项目工期紧张,设计阶段技术方案考虑不充分;
  • 项目中使用了不合理的数据结构或算法;
  • 系统架构设计不合理;
  • 同步执行耗时任务;

3 性能优化的核心环节

不知道大家有没有深入思考过,我们平时写代码到底在写什么?

可能有些人会调侃地说:“无非就是 CURD”。

其实我们编码都是围绕着输入、处理和输出三个主要环节展开的。

在这里插入图片描述
在这里插入图片描述

因此,性能优化也要着重从这三点进行考虑。

如考虑如何更快地查询出数据,更快地对数据进行处理,更快地渲染数据等。

通常来说,处理部分是其中最核心的环节,也是优化的重点。

4 寻找性能瓶颈

性能优化的前提是要找到性能瓶颈,通常需要通过自测、压测、耗时告警日志、数据库慢查询日志、调用链路追踪技术等手段,发现性能瓶颈。

通常在实际开发中,某个接口的响应时间过长影响用户体验,如果条件允许,就要考虑优化。

通常 2C 的业务更关注性能优化,2B 的业务相较于 2C 的业务通常来说性能问题只要不是太严重,通常没那么紧迫。

产生性能瓶颈的原因有很多,如使用的算法时间复杂度较高、数据库查询语句没有覆盖到索引、调用链路过长等。

如果需要分析接口找出性能瓶颈,推荐大家使用 arthas ,可以使用其中的 trace 命令,该命令可以追踪调用链路,给出调用的耗时。

在这里插入图片描述
在这里插入图片描述

如使用 trace 命令,对某个耗时较长的接口进行分析: trace com.xxx.service.impl.AServiceImpl refresh,给出下面结果:

在这里插入图片描述
在这里插入图片描述

根据上面的结果可以看出,com.yyy.service.impl.AServiceImpl:refreshSomeThings 耗时最长,可以继续再 trace 耗时最多的子函数,最终定位到最影响耗时的函数上。

找到耗时最长的环节之后,根据具体代码推断出耗时长的原因,然后再针对性地进行优化。

优化后可以通过性能测试压力测试等手段验证性能优化的有效性。


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 性能优化的根本目的是什么?
  • 2 出现性能问题的主要原因
  • 3 性能优化的核心环节
  • 4 寻找性能瓶颈
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档