【发布时间】:2025-11-27 07:20:04
【问题描述】:
我在网上找到了几篇关于如何在 Node.js 中测量代码性能的文章和问题。但我得到的结果相差大约两倍,具体取决于测量工具。 目标函数是:
let arr = [75, 283, 361, 168, 23, 489, 421, 95, 72, 380, 384, 470, 235, 465, 276, 26, 364, 416, 373, 184, 211, 239, 485, 18, 19, 252, 447, 6, 291, 324, 497, 352,
458, 201, 238, 116, 333, 163, 207, 417, 340, 431, 5, 269, 258, 178, 182, 295, 257, 434, 37, 372, 154, 223, 313, 80, 71, 229, 379, 181, 396, 281, 491, 58, 254,
359, 79, 175, 143, 214, 217, 148, 393, 246, 34, 166, 251, 381, 413, 180, 338,
442, 494, 378, 123, 118, 395, 446, 459, 472, 457, 51, 127, 351, 389, 157, 260,
370, 405, 346]
const { performance } = require("perf_hooks")
function summBrute(arr, k) {
for(let i = 0; i < arr.length; i++) {
for(let j = i + 1; j < arr.length; j++) {
if(arr[i] + arr[j] == k) {
return true;
}
}
}
return false;
}
而测量方法有:
console.time('summBrute')
summBrute(arr, 394)
console.timeEnd('summBrute')
var t0 = performance.now()
summBrute(arr, 394) //
var t1 = performance.now()
console.log("Call to summBrute took " + (t1 - t0) + " milliseconds.")
这里我想知道有问题的数组中是否有两个数字,把它们相加,得到被调用函数的第二个参数。我使用这两种方法是相互独立的,只是注释掉代码的相应部分。 console.time() 给出平均 0.300 毫秒的性能得分 console.time result
而performance.now() 给出0.170ms performance.now result
请帮助我理解为什么这两种方法会给出不同的结果(几乎翻倍)?我正在使用 Node v15、CPU Core i5、8GB RAM、Win10。
【问题讨论】:
-
你试过交换这两种方法吗?您的“基准”没有预热时间,第一次运行需要更长的时间并不罕见。 mrale.ph/blog/2012/12/15/microbenchmarks-fairy-tale.html
-
是的,我尝试分别启动两个测试大约 20 次。
-
这不太可能是 100-300 毫秒,而是 0.100-0.300,它只在我的笔记本电脑上运行了 2 毫秒,它被浏览器吃掉了,并且有 i5。此外,您可能希望将测量线放入一个循环中,以检查它们在如此短的时间内是否完全一致。
-
哦,是的 - 我已经编辑了数字
标签: javascript node.js arrays algorithm performance