gpt4 book ai didi

javascript - 如何通过回调测量调用的持续时间并将其导出为 nodejs 模块?

转载 作者:搜寻专家 更新时间:2023-11-01 00:01:06 25 4
gpt4 key购买 nike

参数将是:(functionToCall, argumentArray, numberOfCalls)。它返回一个对象,该对象会告诉我们每个类别的成功和失败次数:平均时间、最小值和最大值。回调可以假设为函数(错误,结果)。伪代码就像

   measureWithCallback = function(functionToCall, argumentArray,numberOfCalls, callback) {
var perfResults = { success: { }, failure: { } };
... measure ...
callback(null, perfResults);
}

使用参数 argumentArray 调用 functionToCall,一次调用 numberOfCalls 次

    argumentArray.push(function(error, success) {
// record results
// call next
});

使用提供的参数调用函数:

 functionToCall.apply(argumentArray);

最佳答案

我之前理解有误,没有意识到你正在测试的函数(functionToCall)也需要传递一个回调。

function measureWithCallback(functionToCall,
argumentArray,
numberOfCalls,
callback) {
var args = argumentArray.concat([callFn]);
callI = 0,
perfResults = { success: [], failure: [] },
start = 0;

callFn();

function callFn(err) {
// Store the results for this call.
if (callI > 0)
perfResults[err ? 'failure' : 'success'].push(Date.now() - start);

if (callI < numberOfCalls) {
callI++;
start = Date.now();
functionToCall.apply(null, args);
} else {
callback(null, aggregateResults(perfResults));
}
}

function aggregateResults(results) {
return {
success : totals(results.success),
failure : totals(results.failure)
};

function totals(arr) {
return {
avg : arr.reduce(add, 0) / arr.length,
max : Math.max.apply(Math, arr),
min : Math.min.apply(Math, arr),
count : arr.length
};

function add(x, y) {
return x + y;
}
}
}
}

measureWithCallback 可以用像::这样的表达式来测试

measureWithCallback(
fs.appendFile.bind(fs),
['./node.txt', 'testing.\n'],
3000,
console.log.bind(console)
);

和:

measureWithCallback(testFn, [], 30, console.log.bind(console));

function testFn(cb) {
var r = Math.random();
setTimeout(cb.bind(null, r > 0.5 ? null : new Error()), Math.floor(r * 1000));
}

第二个例子产生如下输出:

null { success: { avg: 802.4444444444445, max: 996, min: 506, count: 18 },
failure: { avg: 287.9166666666667, max: 485, min: 15, count: 12 } }

返回的数字(最小值、最大值和平均值)是以毫秒为单位的耗时。

关于javascript - 如何通过回调测量调用的持续时间并将其导出为 nodejs 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32124768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com