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 に答える