【问题标题】:NodeJS Filesytem sync and performanceNodeJS 文件系统同步和性能
【发布时间】:2012-11-17 19:31:27
【问题描述】:

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

【问题讨论】:

  • 奇怪的是中间件不允许异步执行,因为没有 IO 你无法完成任何事情

标签: node.js asynchronous sync


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多