# 常用的性能优化方法

作者:程序员鱼皮 (opens new window)编程导航星球 (opens new window) 编号 1

性能优化是程序员工作必备的技能,下面分享一些经典的性能优化思路和方法。

首先明确性能优化的定义和目标。性能优化是指通过 **持续的 **分析、实践和测试,确保系统稳定高效运行,从而满足用户的诉求。 性能优化闭环:

# 性能优化分类

一般情况下,我们把性能优化分为 2 大类:

1)通用优化

是指一些经典的、对于绝大多数情况都适用的优化策略。比如增大服务器的并发请求处理数、使用缓存减少数据库查询、通过负载均衡分摊请求、同步转异步等。

2)对症下药

是指结合具体的业务特性和系统现状,先通过性能监控工具、压力测试等方式,分析出系统的性能瓶颈,再针对性地选取策略进行优化。

比如数据库单次查询超过 1 秒,属于慢查询,根据实际的查询条件给对应的字段增加索引,一般就能提高查询性能。

实际开发中,这两类性能优化策略通常都要使用。在系统设计和开发阶段,我们要根据自己的经验,本能地引入一些性能优化的手段,降低后续系统出现问题、需要迭代优化的概率。此外,性能优化一定是持续的,随着需求、用户、系统用量的增多,原本性能符合要求的系统也可能会出现各种新的问题,很难面面俱到、一步到位。

但是,对于复杂的、对可用性和稳定性要求极高的项目,我们可以提前通过压力测试来模拟用户量极大的情况,并提前做好性能优化和应对措施。

# 通用性能优化手段

有哪些通用的性能优化手段呢?

我们以一个请求的完整生命周期为例,依次去介绍。

通常,用户从发送请求,到最终得到数据,要分别经过以下节点:

每个节点,我们都有对应的优化方法:

1)前端:

  • 离线缓存:利用浏览器的缓存机制,请求过一次的资源就不用重复请求,提高页面加载速度。
  • 请求合并:页面请求过多时,将多个小请求合并成一个大请求,减少网络开销。
  • 懒加载:延迟加载页面的图片等元素,提高首屏加载速度。

2)网关:

  • 负载均衡:负责接受请求,根据一定的路由算法转发到对应的后端系统,实现多个后端服务器分摊请求,增大并发量。
  • 缓存:将后端返回的数据进行缓存,下次前端请求时,直接从网关获取数据,减少后端调用、提高数据获取速度。

3)后端请求层:

  • 服务器优化:根据业务特性,选择性能更高的服务器并调整参数,比如 Nginx、Undertow 等。
  • 微服务:将大型服务拆分为小型服务,并通过微服务网关进行转发,增大各服务的并发处理能力。

4)业务逻辑层:

  • 异步化:将同步的业务逻辑改为异步,尽早响应,提高并发处理能力。
  • 多线程:将复杂的操作拆分成多个任务,通过多线程并发执行,提高任务处理效率。

5)中间件(第三方依赖):

  • 缓存:将数据库查询出的结果数据缓存到性能更高的服务(比如基于内存的 Redis 或本地),减少数据库的压力、并提高数据查询性能。
  • 队列:使用消息队列,对系统进行解耦、或者将操作异步化,实现流量的削峰填谷。

6)存储层:

  • 分库分表:数据量极大时,对数据库进行垂直或水平切分,提高数据库并发处理能力。
  • 数据清理:定期清理无用或过期的数据,减少存储压力,必要时可以对数据进行备份转储。

虽然有那么多性能优化方法,但并不是每一种都要用、每一种都有用。在做性能优化时,一定要根据实际情况,权衡性价比和系统改动风险,并且做好充分的测试,不要好心优化、结果给系统导入了新的 Bug。而且一般情况下,不建议大家为了优化盲目引入新技术,先从成本最低的优化方法开始。

举个例子,你在本地使用 Elasticsearch 优化了查询性能,但是公司根本没有成本采购 Elasticsearch,这就脱离了实际情况。 大家先了解这些方法,日后做性能优化时能够想起来就足够了。

# 实践

编程导航星球的定制化代码生成项目讲解并实战了多种性能优化方法。

👉🏻 编程导航原创项目教程系列:https://yuyuanweb.feishu.cn/wiki/SePYwTc9tipQiCktw7Uc7kujnCd (opens new window)

最近更新: 2/1/2024, 7:39:06 PM
编程导航   |