性能问题大部分都是随着项目的维护产生的,比如系统的内容变多,角色数量的增长,整个优化流程基本上是
- 发现明显卡顿
- 使用工具定位性能瓶颈
- 分析产生瓶颈的代码、函数
- 优化 测试
常见的优化维度:
- 算法、数据结构
编码压缩算法
比如寻路算法JPS算法 替代A*
比如业务逻辑的循环次数,遍历方式、提前return
辅助输出结构提升查询速度
大Page的LRU算法使用list 而不是vector更新最近使用的元素 - 缓存思路(空间换时间 复用)
比如池化技术如:内存池、线程池、对象池(注意动态伸缩性问题,当需求>池容量可导致池化技术失效) - 拆解思路
将大消耗的任务分解成小任务分tick加载 - 动静分离
减小更新数据的粒度 - lazyInit
用时加载,而不是一次性全部加载完 - 并发
多线程编程(注意同步异步锁的影响),很多时候并发不及预期可能是同步的问题,比如内存分配器的并发支持等。 - 近似思想
对于有些问题,不用求出最优解,找出可行解即可