0

有时我会通过编写一段代码来让自己感到惊讶,这可能是我猜想的性能最差的代码。代码仅读取目录中的所有文件(文件为纯文本),并在 1/10 秒的间隔后在控制台上打印每个文件的每一行。现在使用下面的方法,如果文件中有 100 万行,将定义 100 万个 setTimeout 函数。并且每 1/10 秒一个 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
                      }
                    });
                })
            })
    }
4

1 回答 1

1

您不能定义数百万个回调,在大约 12,000 个左右之后,您将用完调用堆栈上的空间。这是您将得到的错误:

RangeError: Maximum call stack size exceeded

现在,如果您真的需要,可以通过使用以下命令行参数来增加调用堆栈大小,但我认为它永远不会支持数百万个回调。

node --max-stack-size=val

如果不真正了解您要完成的工作,就很难建议对您的代码进行其他改进。如果你真的有一百万行,以每 1/10 秒 1 的速度打印这些行将花费超过一天的时间,你为什么要这样做?

于 2012-09-29T04:16:26.607 回答