为了减少接口的响应时间,有哪些优化措施?(可以从架构、代码等各个角度谈)?
为了减少接口的响应时间,有哪些优化措施?(可以从架构、代码等各个角度谈)?
我们在开发过程中,当然是希望自己项目接口的响应时间越短越好,至少我看着自己开发出来的代码,都是毫秒级的响应,会有一种自豪感;那么我们项目做了哪些优化,和大家分享分享。
优化代码
先从小处着手,代码写的好坏,直接影响到接口的响应速度;当然这里也不可能展开详谈每一行代码怎么写,主要还是说一下措施:
代码规范:我经常会以自己的标准去衡量其他开发人员代码的好坏,虽然我也不是什么大牛,但毕竟做了十多年的开发,所以很多时候组内年轻人的代码,在我眼里都是不合格的,为了短时间内提升他们的代码水平,只能制定详细的代码规范让他们去遵守;
项目级的处理方案:有些公共的功能,并不需要每个开发去写代码,比如异常处理,直接往上抛,会有统一的代码捕捉异常进行处理的。
集体Code Review还是有必要做的,一方面起到一个威慑的作用(大部分人都好面子,如果自己写的代码太烂被大家看到,也会不好意思,所以写代码的时候会小心一些),另外确实可以让开发人员取长补短。
缓存
缓存很重要,所以单独拿出来说。
出参入参直接缓存:某些场景下,是可以直接把入参作为key,出参作为value,直接缓存起来的,比如放到Redis中;我们有个项目是做费率计算的,需要根据入参查询费率表,并有大量的计算操作,这种场景有两个特点:一是费率信息不会改变,二是计算复杂费时,这个场景就非常适用于出参入参直接缓存(出参=计算结果)。
字典类型的数据,可以静态化后放入内存或第三方缓存中,并定时刷新缓存或做缓存失效的设置。
提前做数据的整合和加工:如果一个接口返回的数据需要几张表关联后才能提供,如果可以的话,尽量提前把这个关联做好;真正接口查询的时候,只查询关联后的结果就可以了。
总之,能查询缓存的话,尽量不要直接查询数据库。
接口拆分
设计和代码一样重要,甚至在我看来,设计比敲代码更重要;所以如何设计一个接口,是非常重要的(通常要全盘考虑):
我见过这样的接口,号称万能接口,只对外提供一个接口,根据传入参数的不同,后面的业务逻辑也不相同,我是非常反感这样的做法。
垂直拆分:把一个庞大的接口,拆分成N个独立的小接口,每个接口可以独立部署、维护、迭代;但是接口的【大小】,是很考验开发人员(架构)的。
水平拆分:一方面把接口部署多套,前面挂负载均衡,这是水平拆分的一种;另外一种水平拆分,是将接口中的业务逻辑拆分后并行处理,也是可以减少接口的响应时间的。
为了减少接口的响应时间,有哪些优化措施?(可以从架构、代码等各个角度谈)?相关推荐
- 将一个接口响应时间从2s优化到 200ms以内的一个案例
一.背景 在开发联调阶段发现一个接口的响应时间特别长,经常超时,囧- 本文讲讲是如何定位到性能瓶颈以及修改的思路,将该接口从 2 s 左右优化到 200ms 以内 . 二.步骤 2.1 定位 定位性能 ...
- Java实现elastic中服务接口性能指标统计(接口QPS、接口99响应时间等)并存入表
近期需要对线上A服务接口进行健康度监控,即把A服务各个接口每天的性能指标进行统计并写入库表,便于对接口通过周期性数据进行全面分析及接口优化. 据调研了解,有2种解决方案可行: 1)目前服务接口请求信息 ...
- 支付系统接口性能压力测试TPS优化之路
支付系统接口性能压力测试TPS优化之路 郭柏雅 本文案例是我们品课学院在银行系统性能测试第一个案例,由发生至解决,通过对业务逻辑的认知.测试环境的了解.测试脚本的开发.服务的监控分析优化.操作系统的监 ...
- Fiddler抓包查看接口的响应时间
一.Fiddler抓包查看接口的响应时间 1.需要在每个接口后面直观查看响应时间,不用看右侧Statistics查看Overall Elapsed响应时间 上网百度的资料 2.在右侧FiddlerSc ...
- 《MySQL性能优化和高可用架构实践》阅读总结
文章目录 介绍 第1章 MySQL架构介绍 1.1 MySQL简介 1.2 MySQL主流的分支版本 1.3 MySQL存储引擎 1.4 MySQL逻辑架构 1.5 MySQL物理文件体系结构 第2章 ...
- 2.7mnist手写数字识别之训练调试与优化精讲(百度架构师手把手带你零基础实践深度学习原版笔记系列)
2.7mnist手写数字识别之训练调试与优化精讲(百度架构师手把手带你零基础实践深度学习原版笔记系列) 目录 2.7mnist手写数字识别之训练调试与优化精讲(百度架构师手把手带你零基础实践深度学习原 ...
- mysql优化十:从架构角度全局理解mysql性能优化
从架构角度全局理解mysql性能优化 MySQL性能优化其实是个很大的课题,在优化上存在着一个调优金字塔的说法: 很明显从图上可以看出,越往上走,难度越来越高,收益却是越来越小的.比如硬件和 OS调优 ...
- 另外一些MySQL优化措施
使用MySQL连接池提高性能 对于访问数据库来说,建立连接的代价比较昂贵,因此,我们有必要建立"连接池 "来提高访问的性能.我们可以把连接当做对象或者设备,池中又有许多已经建立的连 ...
- 二、服务器优化(3)服务器端优化措施
一.硬件 如果条件允许,则尽可能使用性能更好的硬件设备. 1.CPU CPU 的选型原则,一般先看主频的高低,然后考虑二级缓存的大小. 其次,注意 Windows 的电源选项. 2.内存 原则上,内存 ...
最新文章
- 后勤问题怎么办。。。(求刊登)
- 用户注册功能交互流程
- html 保存文件指定路径,78.上传文件及在服务器保存文件到任意路径
- react 组件传值
- mysql特殊语句_mysql特殊语句 - BENNEE的个人空间 - OSCHINA - 中文开源技术交流社区...
- bowtie1和bowtie2的比较
- unity编辑器扩展_07(创建对话框,检测按钮的点击,点击按钮后提示信息,保存设置的数据,显示点击按钮后的处理的进度条信息)...
- ELK之ES-Logstash-Kibana互联
- FreeBSD下使用Blogbio写cnblogs博客
- Qualomm openwrt SDK编译
- 程序员英文简历范例(前端)
- ubuntu12.04安装配置opensips,搭建voip服务器
- 进销存php 百度云盘,fb1334 PHP网络版进销存源码WEB进销存源码含说明
- 解决Office桌面图标异常
- #windowsxpsp3系统MS12-020漏洞测试
- [C++] 开灯问题(两个思路)
- [云原生专题-45]:Kubesphere云治理-基于Kubernetes 构建的企业级容器平台简介与总体架构
- 赛事解读|中国工程机器人大赛暨国际公开赛——飞思实验室空中机器人项目-仿真与自主任务赛项
- zcmu --1919(多重背包)
- oracle角色数达到上限,ROLE启用个数限制
热门文章
- 13003.数据类型转换问题(python)
- 路德维希贝多芬计算机怎么操作,贝多芬是不是听不见和看不见
- ARM裸机环境搭建(U-Boot命令详解)
- 怎么把arraylist集合的值放在实体类的属性了_原创 | 使用JPA实现DDD持久化-O/R映射元数据:类级映射-实体和值对象...
- 华硕服务器性能,华硕45nm四核服务器主板突破性能瓶颈
- 阅读众包文献中一些值得mark 的小收获
- 恢复SQLSERVER被误删除的数据(转——收藏)
- dom jaxp详解
- 调用newtonsoft.json反序列出错
- windbg 修改内存和寄存器指令