时代高速发展,技术日新月异。各司左手分布式,右手高并发。嘴上骂骂咧咧动不动优化的卷王,近日出现的可真不少。
他卷任他卷,躺平治百痛,吾可被累死,但也要卷死尔等。
那么今天咱们也聊聊“代码优化”?
如何写出更快更好的代码?
编程技巧
- 更清晰的代码组织结构
- 更明了的命名,更好的逻辑结构
编码技巧
- 更少的占用
- 更快的运行
其实说到这个往细致了说就是 算法和数据结构的事儿,但为什么我觉得差点意思呢?
优化原则
- 保证代码正常工作
- 权衡“优化”代价
- 定义性能指标,集中力量解决首要问题
- 不要忽略可读性
优化代码
发现烂代码
测试与分析
单元测试、基准测试
性能分析、代码覆盖率分析、时间、空间负责度分析
修改烂代码
- 更低的代码覆盖率,更多的可重用代码
- 更好更省的算法
- 更符合的语言特性
- 更顺应度调度
保持书写好代码的习惯
Python优化技巧
分析
- 最懒的性能分析:Unix time
- 内存分析:memory_profiler
- 引用分析:Obj graph
- 最详细的性能分析:cProfile、
- pytest
建议
- 使用尽量低和省的算法与数据结构
- 尽量使用内置数据类型,尽量使用内置函数
- 使用LRU_Cache 缓存数据
- 尽量使用局部变量:与每个作用域内查找变量的速度有关,局部变量最快,类级属性中等,全局变量最慢
- 使用函数
- 提防字符串:在循环中运行 模数(%s)或 .format() 会变量,优先用 f-string
- 巧用多重赋值
- 使用生成器
- 使用MultiProcessing克服GIL、使用线程池、使用Coroutine
- 使用C/C++ 模块提高性能,使用Cython
- 使用JIT
一些分析工具:
vprof
pyinstrument
scalene
阿姆达尔定律:Amdahl’s law