NodeJS文件系统同步和性能

时间:2012-11-29 16:49:37

标签: node.js asynchronous sync

我遇到了NodeJS的问题,由于某些中间件,我需要直接返回一个需要知道文件上次修改时间的值。显然,正确的方法是

getFilename: function(filename, next) {
    fs.stat(filename, function(err, stats) {
        // Do error checking, etc...
        next('', filename + '?' + new Date(stats.mtime).getTime());
    });
}

但是,由于我使用的中间件,getFilename必须返回一个值,所以我在做:

getFilename: function(filename) {
    stats = fs.statSync(filename);
    return filename + '?' + new Date(stats.mtime).getTime());
}

我并不完全理解NodeJS事件循环的本质,所以我想知道的是,如果statSync在其中有任何特殊的含量,它以某种方式抽取事件循环(或者在节点中调用的任何东西,指令堆栈)等待执行)当filenode信息正在加载或者它是否真的阻塞时,这段代码将导致性能噩梦在路上我应该重写我用来使用回调的中间件?如果它确实有特殊的酱,以允许事件循环在磁盘上等待时继续,那么它是否可以在其他任何地方使用(尽管有一些承诺库或其他东西)?

1 个答案:

答案 0 :(得分:2)

不,这里没有魔法。如果你在函数中间阻塞,一切都被阻止了。

如果性能成为一个问题,我认为你唯一的选择就是重写中间件的那一部分,或者对它的使用方式进行创作。