本文目录导读:

脚本性能优化涉及多个层面,从代码本身到外部资源管理,以下是一些实用且经过验证的方法,按优先级排序:
算法与数据结构优化(收益最高)
-
选择合适的数据结构
- 频繁查找用
Set/Map替代Array - 频繁增删用链表类结构
- 大量数值运算用类型化数组
- 频繁查找用
-
降低时间复杂度
- 避免 O(n²) 的嵌套循环
- 用哈希表将查找从 O(n) 降到 O(1)
- 对大数据集使用分治或二分查找
内存与引用管理
-
减少对象创建和垃圾回收
# 坏:循环内创建对象 for i in range(10000): temp = {"a": i} # 好:复用对象 temp = {} for i in range(10000): temp["a"] = i -
避免内存泄漏
- 及时移除事件监听
- 清理定时器和闭包引用
- 使用弱引用(WeakMap/WeakSet)
循环与迭代优化
-
循环外提取不变计算
// 坏 for (let i = 0; i < arr.length; i++) // 好 const len = arr.length; for (let i = 0; i < len; i++)
-
使用现代迭代方法
for...of比forEach更高效- 生成器函数处理大数据流
Array.from替代 map+spread
异步与并发处理
-
任务分片与调度
function processChunk(data) { const chunk = data.splice(0, 100); // 处理... if (data.length > 0) { requestAnimationFrame(() => processChunk(data)); } } -
使用 Web Workers/子进程
- 计算密集型任务分离
- 避免阻塞主线程/事件循环
缓存策略
-
结果缓存(Memoization)
- 递归函数缓存中间结果
- 数据库查询结果缓存
- API 响应缓存
-
预计算与懒加载
- 初始化时预计算常用值
- 按需加载非关键资源
特定语言优化
Python 示例:
# 使用局部变量加速
def fast_func():
local_sin = math.sin # 局部引用
for i in range(1000):
x = local_sin(i)
# 用列表推导式替代循环
squares = [x**2 for x in range(1000)] # 比 for+append 快
JavaScript 示例:
// 使用位运算加速整数计算
const isEven = (n) => (n & 1) === 0;
// 字符串拼接用模板字面量
const msg = `Hello ${name}`; // 比 + 拼接快
IO与网络优化
-
批量操作
- 数据库批量插入
- 文件读取用缓冲区
- 合并小网络请求
-
数据压缩与编码
- 使用 Protocol Buffers 替代 JSON
- 图片/视频选择合适格式
分析工具使用
关键技巧:
- 先测量再优化(使用 Profiler)
- 关注热点代码(80%时间花在20%代码上)
- 设定性能预算(如:页面加载 < 2s)
常用工具:
- Chrome DevTools Performance
- Python cProfile
- Node.js --prof
实践建议
- 从瓶颈开始:先找到最慢的部分,微优化非热点代码收益甚微
- 渐进式优化:每次只改1-2处,测量效果后再继续
- 测试验证:确保优化不会引入 bug 或降低可维护性
- 记录基线:优化前记录性能数据,方便对比
最容易被忽视的一点:有时候最有效的优化是“不做”,考虑是否真的需要执行这个操作。 用条件判断跳过不必要的计算,往往比任何代码优化效果都好。