You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中licz()函数执行时间测量异常问题排查

问题分析与解决方案

嘿,我完全懂你的烦恼——用window.performance.now()测量licz()的执行时间时,不管数组大小怎么调,结果总是0或1毫秒,这根本没法用来做性能对比图表对吧?咱们来拆解问题,搞定它:

为什么会出现这种情况?

你的licz()函数基于二分查找实现,时间复杂度是O(log n)——哪怕数组是10000个元素,log2(10000)也才约14次比较操作。浏览器的JS引擎(比如Chrome的V8)执行这些步骤只需要几微秒,而window.performance.now()虽然能精确到微秒级别,但当你输出结果时,通常会被四舍五入到毫秒,所以就显示成0或1ms了。单次执行的速度实在太快,超出了肉眼能看到的差异范围。

解决办法:多次重复执行取平均值

要得到有统计意义的时间数据,你需要把licz()的调用重复很多次,用总耗时除以执行次数得到平均时间。这样就能放大时间差异,不同数组大小的性能区别就会显现出来。

修改你的时间测量代码如下:

// 函数调用部分
w = 49; // 查找的数值
n = tab.length; // 数组长度

const iterations = 10000; // 重复执行的次数,可根据需要调整
let sum = 0; // 用来存储返回值,避免浏览器优化

var start = window.performance.now();
for(let i = 0; i < iterations; i++){
  ilosc = licz(tab, w, n);
  sum += ilosc; // 强制使用返回值,防止JS引擎优化掉函数调用
}
var end = window.performance.now();

var averageTime = (end - start) / iterations;
console.log(`Average time per execution: ${averageTime} ms`);
console.log(`Total occurrences summed: ${sum}`); // 验证执行次数

额外注意事项

  • 调整迭代次数:如果数组很大(比如百万级),可以适当减少迭代次数;如果数组较小,就增加次数,保证总耗时在几十到几百毫秒之间,这样计算出的平均值更准确。
  • 避免浏览器优化:一定要使用函数的返回值(比如上面的sum += ilosc),否则JS引擎可能会判断函数调用没有副作用,直接跳过执行,导致时间测量完全不准。
  • 测试环境一致:测试时尽量关闭浏览器的其他标签页、插件,避免其他进程干扰性能测量结果。

这样修改后,你就能得到不同数组大小下licz()的平均执行时间,用来制作时间与数组大小的关系图表就没问题啦。


内容的提问来源于stack exchange,提问作者Constant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 05:32:27