【问题标题】:Console.time always returns 0.000msConsole.time 总是返回 0.000ms
【发布时间】:2014-11-03 13:57:03
【问题描述】:

我正在使用node-webkit 创建相册管理器,并且正在设置递归扫描以查找我的所有照片。我正在扫描大约 10k 个文件,但 console.time 只返回 0.000 毫秒。我知道扫描发生得很快,但没那么快。 我做错了吗?

var fs = require('fs');
var path = 'I:/pictures/';

console.time('read-directory');

var scanDirectory = function(path) {
    fs.readdir(path,function(err,files) {
        if(err) {
            console.log(err);
        } else {
            files.forEach(function(file) {
                fs.stat(path + file, function(err,stats) {
                    if(err) {
                        console.log(err);
                    } else {
                        if(stats.isDirectory()) {
                            scanDirectory(path + file + '/');
                        } else {
                            console.log(path + file);
                        }
                    }
                });
            });
        }
    });
}

scanDirectory(path);

console.timeEnd('read-directory');

【问题讨论】:

  • fs.readdir 是异步的。 console.timeEnd 在读取任何内容之前被调用。

标签: node.js node-webkit


【解决方案1】:

您正在使用异步的fs.readdir。所以你的计时器不取决于你的 scanDirectory 执行。

实际上,它只是在您调用scanDirectory(path) 然后在停止计时器之后直接启动您的函数。

如果你愿意,你可以使用fs.readdirSync,因为它是一个同步功能,所以它可以防止跳转到计时器结束。问题在于,这会在这段时间内冻结您的应用程序(如果您直接使用它)并可能会减慢您的执行速度。

为了获取异步函数的执行时间,您可以使用 Node-webkit 的分析器工具。但是您需要手动过滤和求和它们...

另一个解决方案是使用timely(它是一个 npm 包),可以对同步或异步函数进行计时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2016-11-02
    • 2016-07-20
    相关资源
    最近更新 更多