Table of Contents:

编程领域的优化技术
- 控件复用(避免频繁申请和释放内存)
- listview里面的item
- 屏幕外的 Item 不销毁,而是放入复用池
- 新 Item 需要显示时直接从池中获取。
- 线程池
- 对象池
- 数据库连接池
- 网络连接池
- 时间换空间
- 索引
- 优点:
- 大幅降低查询时间
- 缺点:
- 占用额外存储空间
- 更新数据时需要维护索引
- 缓存
- 把计算结果或热点数据保存起来,下次直接使用
- 存在缓存一致性问题
- 增加系统复杂度
- 局部性原理
- 下步执行指令的可能就在当前附近,下次访问的数据也可能就在当前的附近
- 预计算,预处理(Precompute)
- 提前计算未来可能使用的数据
- 数学查表法
- 并行处理
- 多进程
- 多线程
- GPU 替代 CPU
- 流水线技术
- 将任务拆分为多个阶段,各阶段并行工作。
- 视频编码
- CPU指令流水线
- 延迟加载(Lazy Loading):需要时再加载资源
- 图片懒加载
- 数据懒加载
- 批处理(Batch Processing)
- 核心思想:多个请求合并后统一处理。
- 典型场景:
- 数据库批量插入 1000次INSERT
- 网络包合并发送
- 日志写入
- 异步化(Asynchronous Processing)
- 核心思想:发起任务后立即返回,不阻塞当前流程。
- 典型场景:
- 消息队列
- 邮件发送
- 订单处理
- 优点:
- 提高系统响应速度
- 削峰填谷
- 算法与数据结构优化
- 核心思想:通过更高效的算法降低时间复杂度。
- 通常这是收益最高的一类优化。
- 通过预测提高性能
- 小说的下一页预加载
- 电商大促的CDN预热

从本质上看,大多数性能优化都可以归纳为四大方向:
1. 少创建
├── 控件复用
├── 线程池
└── 对象池

  1. 少计算
    ├── 缓存
    ├── 索引
    ├── 预计算
    └── 更优算法

  2. 同时做
    ├── 多线程
    ├── 多进程
    ├── GPU计算
    └── 流水线

  3. 少等待
    ├── 异步化
    ├── 批处理
    └── 延迟加载

抽象
封装,隐藏实现细节
自顶向下逐步分解
以空间换时间
空间和时间局部性原理

计算机系统结构中的8个伟大思想

具体项目

参考链接