[英]JS performance.now() and console.time() inaccurate in Nodejs?
我對 JS 比較陌生,並試圖對一些代碼進行基准測試(以研究各種算法的性能),這樣我就可以看到在我的終端上運行時需要多長時間。 我原來有:
function benchmark(callback, name = `${callback+""}`) { // Convert callback to literal string if no name provided
console.log(`${name}`);
console.time("time");
console.log(`\t${callback}`);
console.timeEnd("time");
console.log('\n');
}
但是,我沒有收到運行該功能所需的時間。 例如,我的輸出表明找到第 6 個斐波那契數比找到第 50 個需要更長的時間。
function fib(n) {
if (n === 1 || n === 2) return 1;
return fib(n - 1) + fib(n - 2);
}
當我運行時:
benchmark(fib(6), "fib(6) Rep 1"); // 0.5449770092964172ms
benchmark(fib(50), "fib(50) Rep 1"); // 0.004218995571136475ms
fib(50)
完成需要更長的時間,但測量的時間更短!
performance.now()
修改的基准也不起作用如果我使用performance.now()
我會遇到上述相同的問題。
const {performance} = require('perf_hooks');
function benchmark(callback, name = `${callback+""}`) {
let t0 = performance.now();
let result = callback;
let t1 = performance.now();
console.log(`\t${result}`);
console.log(`time: ${t1 - t0}ms`);
console.log('\n');
};
我懷疑計時器會隨機停止或在通話結束之前停止。 我應該將回調轉換為承諾,並使用.then
或await
嗎? 或者我是否遺漏了一些關於 JS 的更基本的東西(比如事件循環或調用堆棧)?
我經歷了:
Klaycon在上面的評論中為我解決了這個問題,但由於某種原因無法發布答案。 我傳入了一個數字(而不是回調); 我正在評估計時器之前的回調。
要解決我的問題,我首先需要將實際回調傳遞到我的benchmark()
函數中:
benchmark( () => fib(6), "fib(6) Rep 1");
然后我需要在我的基准函數本身中調用我的回調:
function benchmark(callback, name = `${callback + ""}`) {
console.log(`${name}`);
console.time("time");
console.log(`\t${callback()}`); // ##### CHANGE HERE ######
console.timeEnd("time");
console.log('\n');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.