当滚动控制台窗口时,Node.js停止

pol*_*.ph 4 windows performance event-loop node.js

如果在Windows下的Node.js中运行以下脚本(至少8个)

const init = +new Date;
setInterval(() => {
    console.log(+new Date - init);
}, 1000);
Run Code Online (Sandbox Code Playgroud)

并拖动控制台窗口滚动条的拇指,脚本的输出看起来类似于

1001
2003  // long drag here
12368 // its result
13370
14372
Run Code Online (Sandbox Code Playgroud)

看起来Node.js的事件循环在滚动期间停止.http包内的异步操作也应该发生同样的事情.因此,留下可见的终端窗口对正在运行的服务器是危险的.

如何更改代码以避免此类行为?

Ami*_*ein 7

滚动或选择文本时,NodeJS不会暂停.将数据发送到stdout的唯一函数将暂停.在您的服务器中,您可以将日志数据发送到文件,这样您的服务器就不会停止.

例如,请参阅以下代码:

const init = +new Date;
var str=''
setInterval(() => {
    x=(+new Date - init).toString();;
    str+=x + '\n'
}, 1000);

setTimeout(function(){
    console.log(str)
},5000)
Run Code Online (Sandbox Code Playgroud)

我在前5秒内选择了文本,结果如​​下:

C:\me>node a
1002
2002
3002
4003
Run Code Online (Sandbox Code Playgroud)

你可以看到没有'暂停'.

如您所见,第一个事件循环setInterval没有停止,因为没有console.log内部.

现在,当您使用输出文件进行日志记录时,可以使用查看实时日志tail -f.这将显示输出文件中的每个新行.

  • @MauricioGraciaGutierrez:在窗户上; 它正在停止. (2认同)

dri*_*ger 5

进入选择模式时,滚动或单击控制台时,控制台实际上正在暂停。暂停时在标题栏中查看,可能会说选择。

为避免这种情况,请编辑命令提示符的属性,然后取消选择“快速编辑模式”。

  • 在第三方控制台(例如ConEmu或cmder)中运行相同的代码,您会发现它工作正常。这是Windows命令提示符在滚动时暂停应用程序执行的一个特殊问题 (2认同)