【问题标题】:How to calculate the execution time of a async method in JavaScript? [duplicate]如何计算 JavaScript 中异步方法的执行时间? [复制]
【发布时间】:2021-08-10 10:00:48
【问题描述】:

我有一个节点文件,其中包含许多方法,包括从数据库中获取数据的异步调用方法。我需要找到它的确切执行时间。

所以我尝试了,

.
.
var start = Date.now();
await dbFetching()
var end = Date.now();
console.log(end - start)
.

然后我尝试使用执行文件的外部 shell 脚本并找到整个文件执行的实际执行时间。但问题是我只需要计算异步调用(dbFetching)所花费的时间。下面是我的shell脚本,

#!/bin/sh

START=$(date +%s)
node ./s3-glacier.js
END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"

但我虽然喜欢,如果我可以在 shell 脚本中运行整个节点脚本,也许我可以计算时间。因此,建议您对此进行思考,以仅计算异步时间消耗。 提前致谢

【问题讨论】:

  • "我需要找到它的确切执行时间。"不要依赖于异步调用的一种度量。如果您尝试 100 次重复,您可能会看到相当多的次数。相当多的事情发生在内部,并且有各种随机性来源。当心。
  • 是的。每次迭代的时间是否变化都没有关系。但我需要找到单个异步调用的执行时间

标签: node.js shell asynchronous sh


【解决方案1】:

如果您有这种可能性,请使用async/await。它看起来像:

var start = Date.now();
await dbFetching(); // blocks execution of code
var end = Date.now(); // this happens AFTER you've fetched the data
console.log(end - start)

不过,这需要将您的函数标记为 async,或者返回一个 Promise。

否则,您需要将回调传递给函数,以便函数在完成时调用它,并且您知道现在是计算一角钱的时候了。大致如下:

var start = Date.now();
dbFetching(function done() { // done should be called AFTER the data is fetched
  var end = Date.now();
  console.log(end - start)
})

【讨论】:

  • 实际上我忘了提到该函数是通过异步等待场景正确处理的。但是获取时间比控制台时间差要长。这是因为异步行为
猜你喜欢
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
相关资源
最近更新 更多