持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第 8 天,点击查看活动详情
1 前言
在前文中已经讲述了性能优化中复用思想和计算优化的内容,在本文中将继续讲述性能优化的其它内容,在日常的开发中,会有实际的用途。
2 结果优化
结果集的优化在实际开发中用到的非常多,但是却没有引起足够的关注。我们都知道现在的前后端传输数据都是通过 json 的格式,但是在之前的传输方式大多都是 xml 的格式。但是还有 Google 的 Protobuf 传输结构,这种 tvl 的数据方式比 json 格式更加节省空间和流量,使得同样的数据内容可以使用更少的传输。
目前的应用大部分都是web服务,采用的都是 c/s 架构,数据从服务器到客户端就需要传输多份,基于此都会考虑减少带宽,减少不必要的数据传输,或者是开启压缩。比如常见的静态资源加速 CDN, 再比如 Ningx 转发时http请求时,一般都会开启 gzip 压缩,用来提高传输性能。
因此,对于结果集的优化常见思路就是想方设法的将返回的数据保持精简,一般客户端不需要的字段,就不会出现的返回的报文中。
3 资源冲突优化
在日常的软件开发过程中,会涉及到许多的共享资源,比如在单体项目中的 hashmap,比如外部的存储设备数据库或者某个表的数据行,也可以是redis 中的一个键,还有就是需要多个资源协调的,比如事务和分布式事务。
以上的问题都是导致性能问题的关键,其中和锁相关的问题非常多,在并发的环境中,处理好锁的问题就能很好的解决以上问题,按照类型来分就是 cpu 命令级的锁,jvm 指令级别锁,还有就是操作系统内部锁。按照锁的级别来分就是乐观锁和悲观锁,乐观锁在效率上比悲观锁更高一些。
4 算法优化
好的算法也能够限制提高业务性能,优化的核心无非就是时间换空间和空间换时间,关键在于当前突出的矛盾是什么。比如在菜单查询时,如果菜单有多级,那么就会产生 N+1 问题,常见的优化算法有,递归算法、二分、快速排序、动态规划等,这些算法都可以降低时间复杂度。另外在java 并发开发过程中,可以采用并发安全集合来降低锁冲突、提高系统的并发性能。比如在操作list,可以使用 CopyOnWriteList 来替代 ArrayList 来操作集合。
4 总结
在本文中,主要讲述了结果集优化、冲突资源优化以及算法优化等方法,这是从开发的角度来解决系统性能的问题,至此,有关性能优化的内主要内容都已经列举,在后续的文章中,将针对某些特定的环节继续展开讲解。