2020-03-02
描述
返回一个函数每秒执行的次数。hz
是 hertz
的单位,该频率的单位定义为每秒一个周期。
提示
- 使用
performance.now()
分别获取函数重复执行iterations
次之前和之后的时间,两个时间相减即可得出所需时间 - 将毫秒转换为秒后再除以函数执行所花费的时间,就可以得到每秒执行的次数
- 第二个参数
iterations
的默认值为 100
代码
const hz = (fn, iterations = 100) => {
const before = performance.now();
for (let i = 0; i < iterations; i++) fn();
return (1000 * iterations) / (performance.now() - before);
};
示例
测试同一功能的不同实现:
// 创建一个包含 10000 个元素的数组
const numbers = Array(10000)
.fill()
.map((_, i) => i);
// 同一功能的不同实现: 对同一个数组中的元素进行相加
const sumReduce = () => numbers.reduce((acc, n) => acc + n, 0);
const sumForLoop = () => {
let sum = 0;
for (let i = 0; i < numbers.length; i++) sum += numbers[i];
return sum;
};
// sumForLoop 比 sumReduce 快了将近 5 倍
Math.round(hz(sumReduce)); // 4018
Math.round(hz(sumForLoop)); // 20555