最简单可靠的性能测试方式是使用 console.time 和 console.timeend。需统一原始数据、深拷贝避免污染、多次运行取最小值,并覆盖字符串、混合类型、nan、对象数组及不同重复率等边界场景。

直接用 console.time 和 console.timeEnd 是最简单、最可靠的方式,不需要引入额外库,浏览器和 Node.js 都原生支持。
基础测试模板
把去重函数包装进一个可复用的计时逻辑里:
- 先用
console.time('label')开启计时器 - 执行去重操作(注意:确保每次测试都用**全新数组**,避免缓存或副作用干扰)
- 用
console.timeEnd('label')输出耗时,自动带单位(ms)
示例:
console.time('Set 去重');const unique = [...new Set(originalArr)];
console.timeEnd('Set 去重');
控制变量,保证结果可信
不同方法比快慢,前提是“站在同一起跑线”:
-
统一原始数据:提前生成好一份百万级测试数组(比如
Array.from({length: 1000000}, (_, i) => i % 1000)),所有方法都用它 -
避免引用污染:不要反复对同一数组调用不同方法;每次测试前用
JSON.parse(JSON.stringify(arr))或扩展运算符深拷贝(仅限简单结构) - 重复多次取平均值:单次运行受 GC、CPU 调度影响大,建议循环 3–5 次,记录最小值或中位数
对比多个方法的实用写法
写一个通用测试函数,批量跑几种实现:
- 传入待测函数
fn和原始数组data - 内部执行 3 次,取
console.time的最小耗时 - 同时输出去重后长度,验证逻辑正确性
这样能一眼看出:谁快、谁准、谁崩(比如 filter+indexOf 在百万级可能卡顿甚至内存溢出)。
注意边界情况
真实业务中数据不只有数字:
- 测字符串数组(含长文本)、混合类型数组(数字+字符串+null)、含 NaN 的数组——Set 能正确识别 NaN,indexOf 不行
- 对象数组要单独设计测试,比如用
{id: 1}重复多次,再比 Map 去重 vs JSON.stringify 方案的耗时和内存占用 - 高重复率(如 80% 重复)和低重复率(如 5% 重复)下,不同方法表现可能差异明显
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











