0%

论优化

时代高速发展,技术日新月异。各司左手分布式,右手高并发。嘴上骂骂咧咧动不动优化的卷王,近日出现的可真不少。

他卷任他卷,躺平治百痛,吾可被累死,但也要卷死尔等。

那么今天咱们也聊聊“代码优化”?

如何写出更快更好的代码?

编程技巧

  • 更清晰的代码组织结构
  • 更明了的命名,更好的逻辑结构

编码技巧

  • 更少的占用
  • 更快的运行

其实说到这个往细致了说就是 算法和数据结构的事儿,但为什么我觉得差点意思呢?

优化原则

  1. 保证代码正常工作
  2. 权衡“优化”代价
  3. 定义性能指标,集中力量解决首要问题
  4. 不要忽略可读性

优化代码

发现代码

测试与分析

  • 单元测试、基准测试

  • 性能分析、代码覆盖率分析、时间、空间负责度分析

修改代码

  • 更低的代码覆盖率,更多的可重用代码
  • 更好更省的算法
  • 更符合的语言特性
  • 更顺应度调度

保持书写代码的习惯

Python优化技巧

分析

  • 最懒的性能分析:Unix time
  • 内存分析:memory_profiler
  • 引用分析:Obj graph
  • 最详细的性能分析:cProfile、
  • pytest

建议

  1. 使用尽量低和省的算法与数据结构
  2. 尽量使用内置数据类型,尽量使用内置函数
  3. 使用LRU_Cache 缓存数据
  4. 尽量使用局部变量:与每个作用域内查找变量的速度有关,局部变量最快,类级属性中等,全局变量最慢
  5. 使用函数
  6. 提防字符串:在循环中运行 模数(%s)或 .format() 会变量,优先用 f-string
  7. 巧用多重赋值
  8. 使用生成器
  9. 使用MultiProcessing克服GIL、使用线程池、使用Coroutine
  10. 使用C/C++ 模块提高性能,使用Cython
  11. 使用JIT

一些分析工具:

vprof

pyinstrument

scalene

阿姆达尔定律:Amdahl’s law