返回顶部
首页 > 资讯 > 前端开发 > JavaScript >常用的性能优化手段有哪些
  • 726
分享到

常用的性能优化手段有哪些

2024-04-02 19:04:59 726人浏览 安东尼
摘要

这篇文章主要介绍“常用的性能优化手段有哪些”,在日常操作中,相信很多人在常用的性能优化手段有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”常用的性能优化手段有哪些”的疑惑

这篇文章主要介绍“常用的性能优化手段有哪些”,在日常操作中,相信很多人在常用的性能优化手段有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”常用的性能优化手段有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

SQL 优化

当你开发的接口响应时间超过了 200ms 的时候就得优化了,当然 200ms 不是绝对值,具体还是看应用场景。以 App 举例,进一个页面调用 5  个接口(题外话:也可以做聚合),那么总共就是 1s 的时间,对用户来说体验还算可以,当然是越快响应越好。

接口耗时 200ms,其中占大头的还是对数据库的操作,一个接口中会有 N 次数据库操作。所以优化 sql 的速度优先级是最高的,大量的慢 SQL  会拖垮整个系统。

关于 SQL 的优化不是本文的重点,大部分慢 SQL 还是跟各位平时开发时的习惯有关系。大部分在写 SQL  的时候不太会去考虑性能,只要写出来就可以了,join 随手就来,也不梳理查询字段,不加索引,刚开始上线没问题,等到并发量,数据量起来的时候就凉凉了。

关于数据库的使用规范大家可以参考下这篇文章:老大让我整理下公司内部Mysql使用规范,分享给大家

当数据量大了后肯定要做读写分离和分库分表的,这也是优化的必经之路。

  • 读写分离

  • 分库分表

减少重复调用

性能不好的另一个致命问题就是重复调用,相同的逻辑在不同的方法中重复对数据库查询,重复调用 rpc 服务等。

比如下面的代码:

skuDao.querySkus(productId).stream().map(sku -> {    skuDao.getById(sku.getId()); })

明明数据已经查询出来了,又根据 ID  重新去查询了一次,数量越多,浪费的时间越多。这里只是举例,我相信在真实的项目中大量存在重复查询的情况,之前我还写过一篇文章,讲解如何解决这种重复查询问题,感兴趣的可以查看这篇文章:简直骚操作,ThreadLocal还能当缓存

按需查询

很多业务逻辑不复杂的功能,却响应很慢。往往都是写代码的时候没有思考,随便就调用一些已经存在的方法,导致整体响应变慢,总结起来就是:性能问题大部分都是代码写出来的。

说个场景,大家肯定都见到过。参数是一个商品 ID,  功能是上架商品,需要进行状态的判断,符合条件才能上架。这个场景下只需要获取商品的状态进行判断即可,有的时候你看到的代码往往都是下面的方式:

GoodsDetail goods = goodsService.detail(id); if (goods.getStatus() == GoodsStatusEnum.XXXX) {  }

detail 中有大量的逻辑,除了基本的商品信息,还有很多其他的内容,这就是慢的原因。

并行调用

针对一个接口,如果设计到多个内部 RPC 服务或者多个外部接口,在接口之间没有关联关系的情况下,我们可以采用并行调用的方式来提高性能。

CompletableFuture 就非常适合并行调用的场景,关于 CompletableFuture 的使用本文不做详细说明,做 Java  的都要会用。

除了 CompletableFuture 之外,对于集合类的处理,可以用 parallelStream 来实现并行调用。

微服务中有一层专门用于聚合 api,  聚合层就非常适合并行调用,一个功能或者一个页面展示会涉及到多个接口,通过聚合层在后端进行接口的聚合和数据的裁剪,一起响应给前端

上缓存

缓存也是优化中最常用的,效果提升最明显的,成本也不大。对于缓存,也不要滥用,不是所有场景都可以靠堆缓存来提高性能的。

首先对于实时性要求不高的业务场景可以优先使用缓存,也不用太考虑更新的问题,自然过期就行。

实时性要求高的业务场景,用缓存一定要有完整的缓存更新机制,否则很容易造成业务数据和缓存数据不一致的情况。

建议的做法是订阅 binlog  来统一更新缓存,不要在代码中去更新或者失效缓存,简单的场景还好,入口就那几个,问题不大。有些数据在多个场景下使用,需要更新的入口太多了,

异步处理

有些逻辑,不需要实时反馈给用户那就可以采用异步的方式在后台进行处理。

异步处理的方式最常见的就是将任务加到线程池中进行处理,线程池需要考虑容量以及对一些指标的监控,相关的文章可以查看我的这篇:一时技痒,撸了个动态线程池,源码GitHub

除了一些指标的监控,线程池的使用另一个需要关注的问题就是任务的持久化。如果你的数据本来就是存储好了的,然后读取出来通过线程池去执行是没问题的。如果是没有持久化直接丢入线程池中进行执行,就有可能出现丢失的情况,比如服务重启之类的场景。

关于持久化,无论是线程池还是 EventBus 这种,都会遇到,所以针对异步的场景我建议大家使用消息队列比较好。

消息队列可以存储任务信息,保证不会丢失。单独消费队列的消息进行逻辑处理,如果想提高消费速度,也可以在队列的消费方使用线程池进行多线程消费,多线程消费也要避免消息丢失的情况,可以查看我的这篇文章:嘘!异步事件这样用真的好么?

JVM 参数调整

JVM 参数的调整,一般情况下我们都不用怎么去调整。偶尔有些代码写的不好,导致内存溢出了,这个时候会去做一些调整和优化代码。

参数调整主要是去降低 GC 的导致的停顿问题,如果你的程序一直在 GC, 一直在停顿,你的接口自然就慢了。

只要没有频繁的 Full GC,在优化这块 JVM 的参数调整可以最后再做,优先以 SQL 优化这些为主。

加机器

加机器是最后的终极大招了,并发量上去的时候,你在怎么优化单机器和单数据库抗并发能力也是有限的,这个时候只能水平扩展了。

如果是创业初期,并且在快速发展,加机器是最直接的优化方式了,虽然说成本上去了,但是开发资源也是成本,节约下来可以实现更多的业务需求。等到中期稳定了再考虑架构,性能方面整体的优化和重构。

就像玩游戏一样,有装备的玩家才能所向睥睨啊,对于后端应用来说也是一样,高配的机器,高配的数据库配置,高配的缓存等。

到此,关于“常用的性能优化手段有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 常用的性能优化手段有哪些

本文链接: https://lsjlt.com/news/84383.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 常用的性能优化手段有哪些
    这篇文章主要介绍“常用的性能优化手段有哪些”,在日常操作中,相信很多人在常用的性能优化手段有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”常用的性能优化手段有哪些”的疑惑...
    99+
    2024-04-02
  • 优化HTTPS的手段有哪些
    本篇内容介绍了“优化HTTPS的手段有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!由裸数据传输的 H...
    99+
    2024-04-02
  • 常用的Android性能优化工具有哪些
    常用的Android性能优化工具有:1. Android Profiler:Android Studio自带的性能分析工具,可以监测...
    99+
    2023-10-12
    android
  • PHP7有哪些性能优化
    这篇文章主要介绍“PHP7有哪些性能优化”,在日常操作中,相信很多人在PHP7有哪些性能优化问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP7有哪些性能优化”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-17
  • 程序性能优化有哪些常见的方法?
    程序性能优化方法包括:算法优化:选择时间复杂度更低的算法,减少循环和条件语句。数据结构选择:根据数据访问模式选择合适的数据结构,如查找树和哈希表。内存优化:避免创建不必要对象,释放不再使...
    99+
    2024-05-09
    性能优化 代码优化 python 数据访问 同步机制
  • 常用的XSS攻击手段有哪些
    XSS攻击手段有:利用植入的脚本来获取管理权限;根据用户的cookie来获取敏感信息;以用户的身份执行一些小动作;以受信任来源的身份请求一些平时不允许的操作。如进行不当的投票活动;在访问量极大的页面上,XSS可以攻击网站,实现DDoS攻击的...
    99+
    2024-04-02
  • Mysql高性能优化技能有哪些
    这篇文章主要介绍Mysql高性能优化技能有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数据库命令规范所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用m...
    99+
    2024-04-02
  • mysql性能优化的方法有哪些
    这篇文章将为大家详细讲解有关mysql性能优化的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司...
    99+
    2024-04-02
  • Vue 性能优化的方法有哪些
    本篇内容介绍了“Vue 性能优化的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言Vue 框架...
    99+
    2024-04-02
  • JavaScript的性能优化方法有哪些
    这篇文章主要讲解了“JavaScript的性能优化方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript的性能优化方法有哪些”吧!无论...
    99+
    2024-04-02
  • JavaScript性能优化的方法有哪些
    这篇文章主要讲解了“JavaScript性能优化的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript性能优化的方法有哪些”吧! ...
    99+
    2024-04-02
  • Java性能优化的细节有哪些
    这篇文章主要介绍“Java性能优化的细节有哪些”,在日常操作中,相信很多人在Java性能优化的细节有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java性能优化的细节有哪些”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-16
  • Java性能的优化技巧有哪些
    这篇文章主要讲解了“Java性能的优化技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java性能的优化技巧有哪些”吧!1.对象的生成和大小的调整。 JAVA程序设计中一个普遍的问题...
    99+
    2023-06-17
  • Hibernate性能优化的方法有哪些
    本篇内容主要讲解“Hibernate性能优化的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate性能优化的方法有哪些”吧!尽量使用many-to-one,避免使用单项on...
    99+
    2023-06-17
  • php性能优化的方法有哪些
    有以下几种常用的 PHP 性能优化方法:1. 使用缓存:通过使用缓存技术,将一些常用的计算结果或数据库查询结果缓存起来,减少重复的计...
    99+
    2023-09-26
    php
  • weblogic性能优化的方法有哪些
    WebLogic性能优化的方法有以下几种:1. 调整JVM参数:通过调整JVM参数可以优化WebLogic的性能。例如,增加堆内存的...
    99+
    2023-09-01
    weblogic
  • Web性能优化的技巧有哪些
    这篇文章主要介绍了Web性能优化的技巧有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Web性能优化的技巧有哪些文章都会有所收获,下面我们一起来看看吧。1. 使用文本压缩使用文本压缩,可以最大程度地减少通过...
    99+
    2023-06-27
  • react性能优化的方法有哪些
    1. 使用生命周期方法:React的生命周期方法可以帮助我们优化组件的性能。例如,使用shouldComponentUpdate方法...
    99+
    2023-09-13
    react
  • python性能优化的方法有哪些
    Python性能优化的方法有:1. 使用更高效的算法和数据结构:选择合适的算法和数据结构可以减少时间和空间复杂度,从而提高性能。2....
    99+
    2023-09-08
    python
  • centos性能优化的方法有哪些
    使用最新的稳定版本的CentOS操作系统,以获得最新的性能优化和修复。 硬件优化:确保硬件设备(CPU、内存、硬盘)能够满足...
    99+
    2023-10-23
    centos
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作