【问题标题】:Benchmark javascript execution with callback functions使用回调函数对 JavaScript 执行进行基准测试
【发布时间】:2012-06-06 20:41:48
【问题描述】:

我有一些 JavaScript,我正在尝试对其执行时间进行基准测试。

这样做的问题是for循环很快完成,同时Item.save()方法的执行还没有完成。

考虑到循环内容中的完整执行时间,有什么建议如何计时?

谢谢!

var start = new Date().getTime();
var Item = new Item();
for (i = 0; i < 500; i++) {
  var item = {};
  item.name = 5;
  item.id = 10;
  item.set = [];
  Item.save(item, function (err, res) {
    console.log(res);
  });
}
var elapsed = new Date().getTime() - start; 
console.log(elapsed);

编辑:这是在 nodejs 服务器上。

【问题讨论】:

    标签: javascript performance node.js benchmarking


    【解决方案1】:

    只需使用Chrome's profiling tools。它们可以让您全面了解页面上每个函数调用所占用的 CPU 时间:

    http://code.google.com/chrome/devtools/docs/cpu-profiling-files/two_profiles.png


    对于 Node,您可以尝试node-inspector 的实验性分析器。

    【讨论】:

    • 对不起,我应该添加 NodeJS 服务器。
    • 谢谢,这很好 - 但是,在所有执行完成之前,它仍然会结束分析器标记。
    • Chrome 的分析工具对于相对性能很有用,但在分析器开启的情况下运行总体上比在控制台关闭的情况下运行要慢得多。
    【解决方案2】:

    处理此问题的最佳方法是修改 Item.save() 函数以获取开始时间,然后在最后进行比较。或者,在 Item.save() 上实现一个回调函数(成功:)。

    【讨论】:

      【解决方案3】:

      答案很简单:create a jsPerf test case。它允许运行异步或“延迟”测试。

      或者,您可以使用 Benchmark.js 并手动设置延迟测试用例。

      不要简单地比较两个 new Date 时间戳,因为这仅适用于同步测试。 (另外,this is not an accurate way of measuring things across all browsers and devices。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-06
        • 1970-01-01
        • 2014-09-20
        • 2012-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多