首页 > 其他分享 >常用的性能优化方法

常用的性能优化方法

时间:2024-07-18 13:40:39浏览次数:15  
标签:常用 缓存 请求 性能 查询 并发 优化

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

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

性能优化闭环:

性能优化分类

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

2)对症下药
是指结合具体的业务特性和系统现状,先通过性能监控工具、压力测试等方式,分析出系统的性能瓶颈,再针对性地选取策略进行优化。
比如数据库单次查询超过 1 秒,属于慢查询,根据实际的查询条件给对应的字段增加索引,一般就能提高查询性能。

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

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

通用性能优化手段

有哪些通用的性能优化手段呢?
我们以一个请求的完整生命周期为例,依次去介绍。
通常,用户从发送请求,到最终得到数据,要分别经过以下节点:

每个节点,我们都有对应的优化方法:
1)前端:
  ●离线缓存:利用浏览器的缓存机制,请求过一次的资源就不用重复请求,提高页面加载速度。
  ●请求合并:页面请求过多时,将多个小请求合并成一个大请求,减少网络开销。
  ●懒加载:延迟加载页面的图片等元素,提高首屏加载速度。
2)网关:
  ●负载均衡:负责接受请求,根据一定的路由算法转发到对应的后端系统,实现多个后端服务器分摊请求,增大并发量。
  ●缓存:将后端返回的数据进行缓存,下次前端请求时,直接从网关获取数据,减少后端调用、提高数据获取速度。
3)后端请求层:
  ●服务器优化:根据业务特性,选择性能更高的服务器并调整参数,比如 Nginx、Undertow 等。
  ●微服务:将大型服务拆分为小型服务,并通过微服务网关进行转发,增大各服务的并发处理能力。
4)业务逻辑层:
  ●异步化:将同步的业务逻辑改为异步,尽早响应,提高并发处理能力。
  ●多线程:将复杂的操作拆分成多个任务,通过多线程并发执行,提高任务处理效率。
5)中间件(第三方依赖):
  ●缓存:将数据库查询出的结果数据缓存到性能更高的服务(比如基于内存的 Redis 或本地),减少数据库的压力、并提高数据查询性能。
  ●队列:使用消息队列,对系统进行解耦、或者将操作异步化,实现流量的削峰填谷。
6)存储层:
  ●分库分表:数据量极大时,对数据库进行垂直或水平切分,提高数据库并发处理能力。
  ●数据清理:定期清理无用或过期的数据,减少存储压力,必要时可以对数据进行备份转储。

虽然有那么多性能优化方法,但并不是每一种都要用、每一种都有用。在做性能优化时,一定要根据实际情况,权衡性价比和系统改动风险,并且做好充分的测试,不要好心优化、结果给系统导入了新的 Bug。而且一般情况下,不建议大家为了优化盲目引入新技术,先从成本最低的优化方法开始。
举个例子,你在本地使用 Elasticsearch 优化了查询性能,但是公司根本没有成本采购 Elasticsearch,这就脱离了实际情况。
大家先了解这些方法,日后做性能优化时能够想起来就足够了。

标签:常用,缓存,请求,性能,查询,并发,优化
From: https://www.cnblogs.com/qimoxuan/p/18309353

相关文章

  • 优化原理 (1)高斯牛顿 线性
        /**Gauss-Newtoniterationmethod*author:Davidwang*date:2020.08.24*/#include<iostream>#include<chrono>#include<opencv2/opencv.hpp>#include<Eigen/Core>#include<Eigen/Dense>usingnamespacestd;u......
  • 优化原理 (1)高斯牛顿 线性
          增量方程   #include<iostream>#include<Eigen/Core>#include<Eigen/Dense>#include<Eigen/Geometry>#include"sophus/se3.hpp"#include"sophus/so3.hpp"intmain(void){//优化变量为李代数se(3)的平移向......
  • Python数据可视化之numpy的11个常用的创建数组的函数
    numpy库在处理成千上万的数据时,Python的1维列表已经不适合来对数据进行处理,效率会很慢,所以numpy就诞生了,他可以将列表变成数组,而数组可以是1维、2维、3维甚至更高纬度,可用于存储和处理大型的矩阵,此外numpy提供了大量的数学函数,包括数学、逻辑、形态操作、排序、选择,输出和......
  • MViTv2:Facebook出品,进一步优化的多尺度ViT | CVPR 2022
    论文将MultiscaleVisionTransformers(MViTv2)作为图像和视频分类以及对象检测的统一架构进行研究,结合分解的相对位置编码和残差池化连接提出了MViT的改进版本来源:晓飞的算法工程笔记公众号论文:MViTv2:ImprovedMultiscaleVisionTransformersforClassificationand......
  • (nice!!!)LeetCode 3112. 访问消失节点的最少时间(图论、边的dijkstra、堆优化)
    3112.访问消失节点的最少时间思路:节点n的个数非常大,用普通的dijkstra算法对节点进行枚举是会超时的,时间复杂度为0(n^2)。这里边的数量最大为10^5,可以对边使用dijkstra算法+堆优化操作,时间复杂度为0(mlogm)。节点消失问题,只需要加一个判断条件,判断到每个节点的最小时......
  • 7000元才有的高性能显卡配置,ToDesk云电脑只要不到1块!
    高性能显卡不仅仅是游戏玩家的刚需,也是设计师、工程师和剪辑师等专业人士的必备电脑配置。对于追求极致图形处理能力的用户来说,7000元的显卡预算并不罕见。然而,这样的花费对于大多数个人用户和小型企业来说,无疑是一笔较大的开销。最近小社长发现了一个平替方案——ToDesk云电脑,......
  • PHP高性能递归函数
    一个递归方法functionorganizeRecords($regions){$organizedRegions=[];foreach($regionsas$region){$organizedRegions[$region['id']]=$region;$organizedRegions[$region['id']]['chi......
  • 性能测试场景设计
    简介性能测试场景设计是指定义和创建用于评估系统性能的模拟场景的过程。这些场景通常包括模拟用户行为、负载模式和使用情况,以便在实际环境下测量系统的性能表现。性能测试场景设计的目标是模拟真实世界中的使用情况,以便评估系统在不同条件下的性能、稳定性和可靠性。性能测试......
  • 程序员常用Mac工具、Idea插件以及Google插件
    1、Typora工具官网地址:https://typoraio.cn/推荐指数:★★★★★作为程序员,Markdown工具肯定是必不可少的,可以用来记录一些技术文档,推荐Typora,整个风格比较简约,自带的样式不太好看,推荐插件typora-theme-pie添加图片注释,不超过140字(可选)2、Termius工具官方地址:https:/......
  • 【数学建模】——多领域资源优化中的创新应用-六大经典问题解答
    目录题目1:截取条材题目 1.1问题描述1.2数学模型1.3求解1.4解答题目2:商店进货销售计划题目2.1问题描述2.2数学模型2.3求解2.4解答题目3:货船装载问题题目3.1问题重述 3.2数学模型3.3求解3.4解答题目4:城市消防站选址问题 题目4.1问题重述4.2......