3

我遇到了 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 是否有任何特殊的调味料以某种方式泵送事件循环(或在节点中调用的任何东西,等待的指令堆栈执行)而文件节点信息正在加载还是真的阻塞,并且这段代码将导致性能噩梦,我应该重写我正在使用的中间件以使用回调?如果它确实有特殊的酱汁允许事件循环在它在磁盘上等待时继续进行,那么它是否可以在其他任何地方使用(尽管一些承诺库或其他东西)?

4

1 回答 1

2

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

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

于 2012-11-29T17:53:35.173 回答