当前位置: 首页 > news >正文

一文了解性能优化的方法

背景

        在应用上线后,用户感知较明显的,除了功能满足需求之外,再者就是程序的性能了。因此,在日常开发中,我们除了满足基本的功能之外,还应该考虑性能因素。关注并可以优化程序性能,也是体现开发能力的一个重要因素。初级程序员可能仅满足于完成需求,但是若想走的更远,我们需要能够进行程序的性能优化。

性能优化方法总览

        那性能优化,在程序开发中如此重要,那该如何进行性能优化呢?这里我结合开发经验,简单总结一些常用的性能优化方法。

  1. 缓存
  2. 并行执行
  3. 异步
  4. 批量
  5. 资源复用
  6. 预加载
  7. SQL优化

缓存

        缓存,一种以空间换时间的思想,也是一种冗余的思想。我们将比较耗时的查询结果,缓存起来,一方面,避免每次连接数据库查询的耗时操作,另一方面,也有效使用了从缓存内存中读取的高效率。

        缓存,可以分为多级缓存。一般常见的有本地缓存和分布式缓存。本地缓存框架有Caffine和Ecache等,分布式缓存框架有Redis和Memocache。对于一些无需持久化(重启后丢失)的数据,可以使用本地缓存;而需要持久化,则考虑使用分布式缓存更好。

        缓存,虽然可以明显提升性能,但也存在可能数据一致性问题。需要我们根据业务场景,来选择合适的缓存策略。

并行执行

        将串行执行动作,改为并行执行,也是常用的优化方法。举个通俗的例子:假如我们有四口锅,需要做饭,分别是煮鸡蛋、炒菜和煮粥;显然,串行的话,只使用一口锅,先后煮鸡蛋、炒菜和煮粥,整体时间会很长;正确的策略是,使用三口锅,三者同时进行,也即并行执行。

        并行执行通常比串行效率更高,但使用过程中,需要注意是否存在线程安全问题。

        实现并行的方式有很多,但总的来讲,一般都是使用多线程,这里推荐使用线程池来实现并行。

异步

        有时候,我们调用一个耗时的接口(比如导出、调用第三方等)时,如果要求同步处理结果,往往会超时。

        此时,可以考虑同步改为异步,先快速返回一个中间状态(比如导出中、处理中等);然后异步再进行耗时的处理,等异步处理完成,更新中间状态为已完成(并可以考虑发送完成的消息通知)。

批量

        一个典型的场景是:当我们需要写入大量数据到表中,通过for循环来单次插入,是个极其耗时的操作,因为它每次都要和数据库进行链接。这也是我们编码过程中需要,特别需要去避免的;正确方式是,改用批量操作的方式,在一个数据库会话中,批量插入数据。

        通俗的例子来讲,你有10个鸡蛋,需要从1楼拿到3楼教室。显然不要一次只拿一个鸡蛋,来回跑10次;而是一次将10个鸡蛋带到3楼。

资源复用        

        资源复用,就是复用已经获取过的资源,也是池化的思想。比如一些开源的数据库连接池,会复用此前已有的Connection,来避免重复建立,从而提升效率。

        设计模式中的单例模式和享元模式,也是资源复用的思想。总的来讲,就是避免每次都新建所需的资源,考虑复用。

预加载

        对于一些比较耗时的资源,且变化不频繁或者实时性要求不高的,可以考虑进行预加载。平时所说的缓存预热,就是一种预加载的思想。

        我们可以在项目启动时,或者发送指定请求时,后台将后续所需的耗时资源,进行加载,放入缓存,这样后续真正需要请求时,直接取得已加载的资源,会快很多。

SQL优化

        通常性能优化的瓶颈,往往在于IO操作。我们操作数据库时,由于业务需要或者设计不合理,尝尝出现慢SQL;此时就需要我们重点进行SQL优化。

        SQL优化的方法有很多手段,其中几个常用的有: 

  1.  设计合适的索;
  2. 避免索引失效的场景;
  3. 以小表驱动大表;
  4. 避免Select * ,只查询所需字段;
  5. 查询执行计划,针对性的进行优化;
  6. 读写分离、分库分表等;

         由于SQL优化的内容较多,这里是简单点明一下,它是程序性能优化的重要方面。

总结

        上述简单罗列了,一些开发中常用的性能优化方向。我们可以根据实际业务场景,针对性的采取具体的优化措施。同时,在进行性能优化时,也别忘了进行性能瓶颈的定位,只有先定位好,瓶颈在哪里,才好针对性的进行优化。

       

相关文章:

一文了解性能优化的方法

背景 在应用上线后,用户感知较明显的,除了功能满足需求之外,再者就是程序的性能了。因此,在日常开发中,我们除了满足基本的功能之外,还应该考虑性能因素。关注并可以优化程序性能,也是体现开发能…...

【怎么用系列】短视频戒断——对推荐算法进行干扰

如今推荐算法已经渗透到人们生活的方方面面,尤其是抖音等短视频核心就是推荐算法。 【短视频的危害】 1> 会让人变笨,慢慢让人丧失注意力与专注力 2> 让人丧失阅读长文的能力 3> 让人沉浸在一个又一个快感与嗨点当中。当我们刷短视频时&#x…...

C#中的委托(Delegate)

什么是委托? 首先,我们要知道C#是一种强类型的编程语言,强类型的编程语言的特性,是所有的东西都是特定的类型 委托是一种存储函数的引用类型,就像我们定义的一个 string str 一样,这个 str 变量就是 string 类型. 因为C#中没有函数类型,但是可以定义一个委托类型,把这个函数…...

PostCss

什么是 PostCss 如果把 CSS 单独拎出来看,光是样式本身,就有很多事情要处理。 既然有这么多事情要处理,何不把这些事情集中到一起统一处理呢? PostCss 就是基于这样的理念出现的。 PostCss 类似于一个编译器,可以将…...

Linux 系统上安装 Docker 并进行配置

Docker 是一种开源的应用容器引擎,它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPh…...

DeepSeek 等 AI 技术能否推动股市的繁荣?

在科技浪潮汹涌澎湃的当下,DeepSeek 等 AI 技术宛如闪耀在天际的耀眼星辰,吸引着全球各界的高度关注。面对这些前沿技术,投资者和市场参与者心中不禁泛起疑问:它们是否能成为推动股市繁荣的强劲动力?这一问题不仅左右着…...

【网络】应用层协议http

文章目录 1. 关于http协议2. 认识URL3. http协议请求与响应格式3.1 请求3.2 响应 3. http的常见方法4. 状态码4.1 常见状态码4.2 重定向 5. Cookie与Session5.1 Cookie5.1.1 认识Cookie5.1.2 设置Cookie5.1.3 Cookie的生命周期 5.2 Session 6. HTTP版本(了解&#x…...

大数据数仓实战项目(离线数仓+实时数仓)2

1.课程目标和课程内容介绍 2.数仓维度建模设计 3.数仓为什么要分层 4.数仓分层思想和作用 下面是阿里的一种分层方式 5.数仓中表的种类和同步策略 6.数仓中表字段介绍以及表关系梳理 订单表itcast_orders 订单明细表 itcast_order_goods 商品信息表 itcast_goods 店铺表 itcast…...

测试csdn图片发布

测试csdn图片发布 ​​...

站在JavaScript的视角去看,HTML的DOM和GLTF的Json数据。

很多前端小伙伴没有见过、操作过gltf文件,对非常懵逼,本文从前端小伙伴最熟悉的dom模型为切入口,以类别的方式来学习一下gltf文件。 一、结构与组织形式 HTML DOM(文档对象模型): 树形结构:HT…...

传输层协议 UDP 与 TCP

🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 前置复盘🦋 传输层🦋 再谈端口号🦋 端口号范围划分🦋 认识知名端口号 (Well-Know Port Number) 二&#xf…...

VSCode源码分析参考资料

VSCode Architecture Analysis - Electron Project Cross-Platform Best Practices 中文版 VSCode 架构分析 - Electron 项目跨平台最佳实践 Sihan Li博客上的vscode源码分析系列:分析了微服务架构、事件体系、资源管理、配置系统等 文召博客上的vscode 源码解析…...

使用VCS对Verilog/System Verilog进行单步调试的步骤

Verilog单步调试: System Verilog进行单步调试的步骤如下: 1. 编译设计 使用-debug_all或-debug_pp选项编译设计,生成调试信息。 我的4个文件: 1.led.v module led(input clk,input rst_n,output reg led );reg [7:0] cnt;alwa…...

ROS-激光雷达-消息包格式-获取激光雷达数据-激光雷达避障

文章目录 激光雷达原理 消息包格式获取激光雷达数据激光雷达避障 激光雷达 原理 激光雷达(LiDAR) 是一种利用激光进行距离测量和环境感知的传感器。它通过发射激光束并接收反射光来测量物体的距离,生成点云数据,用于构建环境的三…...

c++之模板进阶

在前面的文章中,我们已经简单的了解了模板的使用,在这篇文章中,我们将继续深入探讨模板 1.模板的特化 1.1 概念 通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果&a…...

关于Internet Download Manager(IDM)强制下载合并相关二次开发

目录 前言 强制下载视频 强制合并 迁移下载列表 免责声明 附录 前言 那个下载工具IDM不说了,确实有很多便捷的功能,不过也有一些限制 常见的包括但不限于: 1.无法下载有版权保护的视频(不管真假) 2.有时候下载…...

鸿蒙HarmonyOS Next 视频边播放边缓存- OhosVideoCache

OhosVideoCache 是一个专为OpenHarmony开发(HarmonyOS也可以用)的音视频缓存库,旨在帮助开发者轻松实现音视频的边播放边缓存功能。以下是关于 OhosVideoCache 的详细介绍: 1. 核心功能 边播放边缓存:将音视频URL传递给 OhosVideoCache 处理后…...

(10) 如何获取 linux 系统上的 TCP 、 UDP 套接字的收发缓存的默认大小,以及代码范例

(1) 先介绍下后面的代码里要用到的基础函数: 以及: (2) 接着给出现代版的 读写 socket 参数的系统函数 : 以及: (3) 给出 一言的 范例代码,获取…...

程序代码篇---项目目录结构HSV掩膜Opencv图像处理

文章目录 前言第一部分:项目目录结构第二部分:HSV提取HSV色调(Hue)含义取值范围 饱和度(Saturation)含义取值范围 亮度(Value)含义取值范围 第三部分:Opencv图像处理1. 读…...

注解与反射基础

注解 概述 注解(Annotation),从jdk5.0引入。 作用 不是程序本身,可以对程序作出解释(这一点和注释没什么区别)可以被其他程序读取 格式 注释是以“注释名”在代码中存在的,还可以添加一些…...

26-cv-785 便携式多功能检测仪器专利维权!

案号:26-cv-785原告品牌:便携式多功能检测仪器品牌方:ZHIHUI CAO起诉地:美国宾夕法尼亚州代理律所:Aptum Law起诉时间:2026年05月04日起诉类型:专利侵权本次案件涉及的专利如下:湖北…...

收藏必备!小白程序员轻松入门大模型:RAG效果调优全攻略

收藏必备!小白程序员轻松入门大模型:RAG效果调优全攻略 本文深入解析RAG(检索增强生成)效果调优,强调上下文质量对大模型回答的关键作用。文章指出,上下文召回率和准确率是调优的关键指标,分别对…...

AI代码助手如何实现风格化编程:Inkwell-vibe-coding项目解析

1. 项目概述:当AI代码助手遇上“氛围感” 最近在GitHub上闲逛,发现一个挺有意思的项目叫 Inkwell-vibe-coding 。初看这个名字,你可能会有点摸不着头脑——“Inkwell”是墨水瓶,“vibe”是氛围,“coding”是编码&…...

JS如何获取元素高度

在前端开发中,获取元素高度是最基础也是最常用的操作之一。本文将详细介绍 原生JavaScript 和 jQuery 中获取元素高度的各种方法,帮你彻底搞懂它们的区别! 📖 目录 原生JavaScript获取高度jQuery获取高度各方法对比实际应用场景常…...

抖音无水印批量下载终极指南:3分钟学会免费下载视频、音乐和直播

抖音无水印批量下载终极指南:3分钟学会免费下载视频、音乐和直播 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fall…...

初创公司如何借助Taotoken快速构建AI功能原型并控制预算

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创公司如何借助Taotoken快速构建AI功能原型并控制预算 对于资源有限的初创团队而言,在产品中集成智能对话或内容生成…...

办公地毯采购丨雅尔居地毯厂家-方块地毯

做办公地毯采购的人,几乎都有过这样的崩溃时刻:花大价钱买的地毯,不到一年就起球、褪色;满心期待的现货供应,却被商家告知“缺货需等1个月”;施工完不到半年,地毯空鼓、翘边,售后却推…...

探索安卓虚拟摄像头技术:VCAM项目的终极解决方案

探索安卓虚拟摄像头技术:VCAM项目的终极解决方案 【免费下载链接】com.example.vcam 虚拟摄像头 virtual camera 项目地址: https://gitcode.com/gh_mirrors/co/com.example.vcam 在当今移动应用生态中,摄像头功能已成为众多应用的核心组件&#…...

在Hermes Agent项目中接入Taotoken自定义模型供应商的步骤

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Hermes Agent项目中接入Taotoken自定义模型供应商的步骤 对于使用Hermes Agent框架的开发者而言,直接对接不同的大模…...

Diablo Edit2:暗黑破坏神2角色存档编辑器的深度技术解析与实战应用

Diablo Edit2:暗黑破坏神2角色存档编辑器的深度技术解析与实战应用 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit Diablo Edit2是一款功能强大的暗黑破坏神2角色存档编辑器&#xff0…...