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

接口的性能优化(从前端、后端、数据库三个角度分析)

接口的性能优化(前端、后端、数据库)

主要通过三方面进行优化

  • 前端
  • 后端
  • 数据库

前端优化

接口拆分

不要搞一个大而全的接口,要区分核心与非核心的接口,不然核心接口就会被非核心接口拖累

或者一个接口中大部分返回都很快,但是被其中某个逻辑拖累,导致整个接口都很慢,这时候就可以把这个慢的逻辑抽出来,单独做一个接口

什么是核心呢?比如你是视频或者直播网站,那么你的视频、直播的内容就是核心,要先调用视频、直播的接口,保证核心内容能够正常加载,然后再加载评论、礼物等接口。

当然接口的拆分也不宜过多,因为每次接口的请求与断开也都会消耗资源。

按需加载

如果你的接口是返回一篇文章,如果文章很长,则不要直接返回全部内容(尤其设计多图片、视频),可根据用户阅读进度进行逐步加载。

如果是返回列表,则不要全部返回,而要分页显示。

及时反馈用户状态

有些接口返回较慢,用户触发后(比如点击按钮),可能无法立即返回结果。

这时候如果等待接口返回结果后再给用户反馈,那么用户在等待的过程中就会以为自己的操作没有生效,这时候不仅用户体验不好,同时用户还可能会重复点击,造成多次接口访问,同时也会消耗资源。

为避免这种情况,要求用户触发某个动作时,要立刻给用户一个反馈,比如显示“加载中,请等待。。”等字样。

当然前端也可以通过其他方式来限制用户重复点击的问题,比如设置过期时间,加锁等方式

接口并行访问

如果接口之前没有依赖关系,可并行访问,加快访问速度

静态资源CDN

静态资源包括图片、视频等媒体问题,同时也包括js、css、html等一些文本文件。相同的是这些文件都是静态,也就是短期内不会变化的问题。

这些文件就非常适合通过CDN进行加速分发

静态资源缓存

与上述原因相同,因为是静态资源,所以也可以缓存在本地

后端优化

限流、熔断与降级

限流是针对服务请求数量的一种自我保护机制,当请求数量超出服务的处理能力时,会自动丢弃新来的请求。

熔断这一概念来源于电子工程中的断路器(Circuit Breaker)。在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。

降级是将某些不重要的业务关闭,保证核心功能可用。降级的思想是丢车保帅。

防止重复点击

防止多次重复点击,每次接口调用,都会消耗后端资源。

可通过加锁的方式实现

使用多线程

涉及多个对象的操作,尤其是列表循环的操作,可以引入多线程,把之前的串行操作改为并行,大大提高效率

如果涉及到多个线程之前的等待,可是使用CountDownLatch、CyclicBarrier和Semaphore,可参考https://blog.csdn.net/CrankZ/article/details/83781380

异步

一些与主流程不相关的或者耗时较长的处理,可以改为异步,比如发送短信、邮件等

异步的方式有很多种,比如直接新建线程或者引入第三方MQ

缓存

根据我的经验,IO操作(包括与数据库的交互和网络接口的交互)都是占用耗时的大头。所以如果能适当针对这些IO操作加上缓存,将会大大的提高性能。

缓存主要分2类,本地缓存(Caffeine为代表)、远程缓存(Redis为代表),可针对不同的场景进行使用。

当然也可以结合两者,组成二级缓存,这里可以使用阿里开源的组件 https://github.com/alibaba/jetcache

缓存相关内容可参考我的另一篇文章 https://blog.csdn.net/CrankZ/article/details/80537115

本地缓存可参考我的另一篇文章 https://blog.csdn.net/CrankZ/article/details/90344348

数据库连接池

数据库的每次连接与关闭,都会消耗资源,如果每次都这样重新建立并销毁连接,这样会性能低下。

所以数据库连接池的建立多个数据库连接,并将这些连接组成一个连接池,由应用程序动态地对池中的连接进行申请、使用和释放。

数据库连接池可参考 https://blog.csdn.net/CrankZ/article/details/82874158

JVM优化

启动的内存大小、选择合适GC等

组件升级

升级底层组件,比如升级到Java21,在Java21中可以启用虚拟线程、使用新增的GC等

数据库优化

数据库选择

首先要针对不同的数据,选择合适的数据库

常规关系型数据除了常见的MySQL,还可以选择PostgreSQL,TiDB等

非关系型数据,比如大文本,JSON等,可以考虑MongoDB

如果涉及搜索的,可以使用Elasticsearch或者ClickHouse等

图数据库,比选择Neo4j等

下面以MySQL为代表,讲一些关系型数据库的优化

读写分离

增加从节点,从节点专注读请求,主节点专注处理写请求。

主库与从库的结构完全一样,一个主库可以有多个从库

可参考我另一篇文章 https://blog.csdn.net/CrankZ/article/details/84679742

分库分表

当单库单表无法满足需求时,可考虑分库分表。

这里不做赘述,可参考我另一篇文章 https://blog.csdn.net/CrankZ/article/details/84679742

归档历史数据,降低单表规模

MySQL并不适合存储大数据量,如果不对数据进行归档,数据库会持续膨胀,从而降低查询和写入的性能。为了满足大数据量的读写需求,需要定期对数据库进行归档。

在进行数据库设计时,需要事先考虑到对数据归档的需求。

如果有需要,可以考虑专门的数据仓库Hive或者HBase等

索引优化

避免索引失效,尽量保证每次查询都命中索引

可参考我另一篇文章 https://blog.csdn.net/CrankZ/article/details/80468760

参考

https://juejin.cn/post/7287420810318299190

相关文章:

接口的性能优化(从前端、后端、数据库三个角度分析)

接口的性能优化(前端、后端、数据库) 主要通过三方面进行优化 前端后端数据库 前端优化 接口拆分 不要搞一个大而全的接口,要区分核心与非核心的接口,不然核心接口就会被非核心接口拖累 或者一个接口中大部分返回都很快&…...

区块链扩容问题研究【06】

1.Plasma:Plasma 是一种基于以太坊区块链的 Layer2 扩容方案,它通过建立一个分层结构的区块链网络,将大量的交易放到子链上进行处理,从而提高了以太坊的吞吐量。Plasma 还可以通过智能合约实现跨链交易,使得不同的区块…...

英语论文写作常用词汇积累

baseline:比较算法好坏中作为“参照物”而存在,在比较中作为基线;目的是比较提出算法的性能或者用以彰显所提出的算法的优势; benchmark:评价算法好坏的一种规则和标准。是目前的模型能做到的比较好的效果&#xff1b…...

redis集群(cluster)笔记

1. 定义: 由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是Redis的集群,其作用是提供在多个Redis节点间共享数据的程序…...

css 元素前后添加图标(::before 和 ::after 的妙用)

<template><div class"container"><div class"label">猜你喜欢</div></div> </template><style lang"scss" scoped> .label {display: flex;&::before,&::after {content: "";widt…...

C++ 设计模式 Forward Declaration Pimpl

放几轮跟 chatgpt 的对话&#xff0c;很精彩的回答 You 我有个问题&#xff0c;我的 main 目标依赖 src/gcp_subscriber.h 的 GCPSubscriber class 这个 class 有个 private 成员 google::cloud::pubsub::Subscriber 也就意味着我得在 gcp_subscriber.h 里面引用 google clou…...

【uniapp】小程序开发8:滚动组件scroll-view

我们经常需要做页面中部分内容可以滚动的功能&#xff0c;例如“猜你喜欢”&#xff0c;内容太多&#xff0c;通常都会超出屏幕&#xff0c;那么此块区域应该可以滚动&#xff0c;但是顶部的自定义导航栏应该不能随着滚动。 这个时候&#xff0c;就可以使用uniapp提供的滚动组件…...

Java王者荣耀火柴人

主要功能 键盘W,A,S,D键&#xff1a;控制玩家上下左右移动。按钮一&#xff1a;控制英雄发射一个矩形攻击红方小兵。按钮控制英雄发射魅惑技能&#xff0c;伤害小兵并让小兵停止移动。技能三&#xff1a;攻击多个敌人并让小兵停止移动。普攻&#xff1a;对小兵造成基础伤害。小…...

1.鸿蒙应用程序开发app_hap开发环境搭建

1.下载Node.js, Javascipts的运行环境 node.js版本下载v12.18.3/https://www.cnblogs.com/txwtech/p/17865780.html 2.下载并安装DevEco Studio DevEco Studio 3.1 DevEco Studio 3.1配套支持HarmonyOS 3.1版本及以上的应用及服务开发&#xff0c;提供了代码智能编辑、低代…...

JDK多版本集成 Jacoco 配置指南

JDK多版本集成 Jacoco 配置指南 本篇相关 JDK 版本配置如下&#xff1a; JDK8 JDK11 JDK17 Jacoco 是什么 Jacoco 是一个用于Java程序的代码覆盖率报告工具。它通过动态分析&#xff08;在代码执行时收集数据&#xff09;来生成代码覆盖率报告文件。Jacoco 支持多种覆盖率标…...

容器及容器调度(云)

在云计算中&#xff0c;容器是一种轻量级、可执行的软件包&#xff0c;它包含应用程序及其全部依赖项&#xff0c;包括库、二进制文件、配置文件等。容器与虚拟机不同&#xff0c;因为它们不需要包含完整的操作系统&#xff1b;相反&#xff0c;所有容器都共享主机操作系统的内…...

实验七 子网的划分

实验七 子网的划分 实验目的掌握划分子网的方法实验内容划分给定IP地址的子网将划分后的子网应用到网络环境中实验要求每位同学从下表中至少选择一行进行子网划分,并填写所选择行的剩余部分。(注意:子网号全0的不用)标准IP地址 要求划 分子网数 借用的主机位数 子网掩码 第…...

Proteus仿真--射击小游戏仿真设计

本文介绍基于proteus射击小游戏仿真设计&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 K1-K4为4个按键&#xff0c;用于上移、下移、确认等&#xff0c;模拟单机游戏 仿真运行视频 Proteus仿真--射击小游戏仿真设计 附完整Proteus仿真资料代码资料 …...

docker的资源控制:

docker的资源控制&#xff1a; 对容器的使用宿主机的资源进行限制 cpu 内存 磁盘i/0 docker使用linux自带的功能cgroup control grouos是linux内核系统提供的一种可以限制&#xff0c;记录&#xff0c;隔离进程所使用的物理资源 control grouos是linux内核系统提供的一种可…...

Leo赠书活动-13期 【以企业架构为中心的SABOE数字化转型五环法】文末送书

Leo赠书活动-13期 【以企业架构为中心的SABOE数字化转型五环法】文末送书 ✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客…...

【人工智能 | 知识表示方法】状态空间法 语义网络,良好的知识表示是解题的关键!(笔记总结系列)

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…...

华清远见嵌入式学习——QT——作业1

作业要求&#xff1a; 代码&#xff1a; ①&#xff1a;头文件 #ifndef LOGIN_H #define LOGIN_H#include <QWidget> #include <QLineEdit> //行编辑器类 #include <QPushButton> //按钮类 #include <QLabel> //标签类 #include <QM…...

MYSQL练习创建存储函数和存储过程

创建数据表&#xff0c;信息如下&#xff1a; 表结构&#xff1a; 字段名 数据类型 主键 外键 非空 唯一 自增 id INT 是 否 是 是 否 name VARCHAR(50) 否 否 是 否 否 glass VARCHAR(50) 否 否 是 否…...

Java基础语法面试题

数据类型 Java有哪些数据类型 定义&#xff1a;Java语言是强类型语言&#xff0c;对于每一种数据都定义了明确的具体的数据类 型&#xff0c;在内存中分配了不同大小的内存空间。 分类&#xff1a; 基本数据类型 数值型 整数类型(byte,short,int,long) 浮点类型(float,dou…...

结合ColorUI组件开发微信小程序

1.自定义组件生命周期函数&#xff1a; Component({data: {},attached() {console.log("自定义组件生命周期函数 attached--先执行");this.getPos();},ready() {console.log("ready生命周期函数---在attached之后执行")},methods: {getPos() {var that th…...

一键搞定完整网页截图:Chrome扩展终极解决方案

一键搞定完整网页截图&#xff1a;Chrome扩展终极解决方案 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-extension …...

Linux 驱动开发流程(带最小可运行代码 + 通俗类比)

Linux 驱动开发流程&#xff08;带最小可运行代码 通俗类比&#xff09; 很多人学 Linux 驱动都会卡在这里&#xff1a;API 都看过&#xff0c;但完全不知道它们是怎么串起来工作的这篇文章目标很明确&#xff1a; ✅ 用一条主线讲清流程 ✅ 用类比帮你记住 ✅ 给你一个最小可…...

2026 AI工具选型实录:六大场景下的模型对比与效率实测

AI正在成为新一代生产力工具2026年的AI工具市场&#xff0c;已经从"谁参数大"的竞争&#xff0c;转向了"谁真正能落地提效"的比拼。一个明显的信号&#xff1a;CSDN上关于AI编程工具选型的讨论热度&#xff0c;从去年的"要不要用"变成了"用…...

Anthropic一夜震撼升级:Claude获得「永久在线」,全球打工人变天

文章目录一、凌晨三点&#xff0c;你的电脑自己在加班二、从"睡美人"到"永动机"&#xff1a;AI的觉醒之路1. 独立生存空间&#xff1a;专属侧边栏UI2. Webhook唤醒&#xff1a;AI开始自主感知世界3. 浏览器直连&#xff1a;深度集成Chrome三、CoworkConway…...

S-UI配置文件加密终极指南:保护敏感信息的最佳实践 [特殊字符]

S-UI配置文件加密终极指南&#xff1a;保护敏感信息的最佳实践 &#x1f512; S-UI是一款基于SagerNet/Sing-Box构建的高级Web面板&#xff0c;提供多协议支持和流量管理功能。在使用过程中&#xff0c;配置文件包含大量敏感信息&#xff0c;如API密钥、用户数据和服务器配置&…...

美胸-年美-造相Z-Turbo创意工坊:支持批量生成、种子固定、参数网格搜索功能

美胸-年美-造相Z-Turbo创意工坊&#xff1a;支持批量生成、种子固定、参数网格搜索功能 如果你正在寻找一个能稳定、高效生成特定风格图片的AI工具&#xff0c;特别是对“美胸-年美”这类风格有需求&#xff0c;那么你找对地方了。今天要介绍的这个工具&#xff0c;不仅部署简…...

Unity资源提取工具AssetStudio完全指南:从问题解决到专业应用

Unity资源提取工具AssetStudio完全指南&#xff1a;从问题解决到专业应用 【免费下载链接】AssetStudio AssetStudio - Based on the archived Perfares AssetStudio, I continue Perfares work to keep AssetStudio up-to-date, with support for new Unity versions and addi…...

Nginx-UI 备份恢复漏洞 PoC 公开:攻击者可篡改加密备份并注入恶意配置

漏洞概述Nginx-UI 备份恢复机制中被披露存在一个高危安全漏洞&#xff08;CVE-2026-33026&#xff09;。该漏洞允许威胁攻击者在恢复过程中篡改加密备份文件并注入恶意配置。随着公开的 PoC 利用代码发布&#xff0c;未打补丁的系统面临被完全攻陷的即时风险。加密缺陷利用原理…...

解锁音频频域密码:Spek声学频谱分析工具的全场景应用指南

解锁音频频域密码&#xff1a;Spek声学频谱分析工具的全场景应用指南 【免费下载链接】spek Acoustic spectrum analyser 项目地址: https://gitcode.com/gh_mirrors/sp/spek 在数字音频处理领域&#xff0c;准确理解信号的频率特性是解决音质问题、优化音频体验的关键。…...

你的Windows Defender是否正在拖慢系统性能?3步彻底解决方案

你的Windows Defender是否正在拖慢系统性能&#xff1f;3步彻底解决方案 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirro…...