Console.time始终返回0.000ms

时间:2014-11-03 13:57:03

标签: node.js node-webkit

我正在使用node-webkit创建相册管理器,并且我正在设置递归扫描以查找我的所有照片。我正在扫描一些10k文件,但是console.time只能保持返回0.000ms。我知道扫描发生得非常快,但它并不那么快。 我做错了吗?

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');

1 个答案:

答案 0 :(得分:0)

您正在使用异步的fs.readdir。因此,您的计时器不依赖于您的scanDirectory执行。

事实上,它只是在您停止计时器后直接拨打scanDirectory(path)时启动您的功能。

如果你想要,你可以使用fs.readdirSync,这将阻止跳转到计时器端,因为它是一个同步功能。问题是,在此期间会冻结您的应用程序(如果您直接使用它)并且可能会慢慢执行。

为了获得执行asynchrone功能的时间,您可以使用Node-webkit的探查器工具。但是你需要手动过滤和求和......

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