【发布时间】:2017-11-30 00:16:15
【问题描述】:
如果 do 工作函数正在执行某些操作,例如,从队列中挑选一个项目并执行某些操作。随着时间的推移,我将如何获得 doWork 函数的执行时间。我想知道doWork 平均需要多少时间才能完成。
示例代码
function doWork () {
return Promise.resolve({first: 'Tony', last: 'Starks'})
}
async function wrapper () {
console.time('wrapper')
const response = await doWork()
console.timeEnd('wrapper')
return response
}
Promise.all([
wrapper(),
wrapper(),
wrapper()
]).then((result) => console.info(result))
输出
wrapper: 0.388ms
[ { first: 'Tony', last: 'Starks' },
{ first: 'Tony', last: 'Starks' },
{ first: 'Tony', last: 'Starks' } ]
(node:2749) Warning: No such label 'wrapper' for console.timeEnd()
(node:2749) Warning: No such label 'wrapper' for console.timeEnd()
【问题讨论】:
-
谨慎的做法是端到端运行您的函数测试,否则每次调用都将在有限的 CPU 时间中“与所有其他调用”“战斗”。一次进行一项性能测试,并以您现在的方式进行压力测试会更有意义。
-
你基本上是在做
console.time('wrapper')三次,然后再做三次console.timeEnd('wrapper')。通过手动减去时间戳来衡量并行执行的任务。 -
How to measure the execution time of a promise? 的可能重复项,除非您的问题具体是为什么
console.time方法不起作用(请edit 更清楚)。 -
@PatrickRoberts 不确定我明白你想说什么。
-
@Bergi 我发布的代码是对实际代码的过度简化。我已经建立了一个执行一堆任务的离线进程。我们不确定每个任务需要多长时间。理想情况下,这些任务中的每一个都可以是 AWS Lambda,但在不知道需要多长时间的情况下,我们不想采用 lambda 方式。
标签: node.js testing asynchronous promise performance-testing