ときどき、以下のようにパフォーマンスが最悪になる可能性のあるコードを書いて、自分自身を驚かせます。コードは、ディレクトリ内のすべてのファイル (ファイルはテキストのみ) を読み取り、1/10 秒の間隔で各ファイルの各行をコンソールに出力するだけです。以下のアプローチでは、ファイルに 100 万行ある場合、100 万の setTimeout 関数が定義されます。1/10 秒ごとに 1 つの setTimeout がそれぞれの関数を呼び出します。以下のコードがパフォーマンスにどのように影響するのか興味がありましたか? nodejs env で何百万ものコールバックを定義しても問題ありませんか? 以下のコードについてどう思いますか。
function scanDir(dir){
fs.readdir(dir , function(err , list){
var interval = 0;
list.forEach(function(file, index){
lineReader.eachLine(dir + "/" + file, function(line, last) {
interval += 100;
(function(line){
setTimeout(function(){
console.log(line+"\n\r");
},interval)
})(line);
if (last) {
return false; // stop reading
}
});
})
})
}