Node.js Windows上的NodeJS`net`模块慢恢复
在NodeJS的Node.js Windows上的NodeJS`net`模块慢恢复,node.js,linux,windows,windows-subsystem-for-linux,Node.js,Linux,Windows,Windows Subsystem For Linux,在NodeJS的net模块上处理错误时,Linux和Windows之间似乎存在巨大的性能差异。我在Windows上处理了一个ECONNREFUSED错误,它似乎比Linux慢了85倍 请查看以下临时文件: const net = require("net"); console.time("Timing"); const connection = net.createConnection(9999, "localhost"); conn
net
模块上处理错误时,Linux和Windows之间似乎存在巨大的性能差异。我在Windows上处理了一个ECONNREFUSED
错误,它似乎比Linux慢了85倍
请查看以下临时文件:
const net = require("net");
console.time("Timing");
const connection = net.createConnection(9999, "localhost");
connection.on("error", err => {
console.log(err);
console.timeEnd("Timing");
});
在Windows 10 Pro 64位上运行此文件的结果:
请注意,此处的正时为2030.534ms
在WSL上运行此脚本的结果
此处的正时为24.748ms
为什么这一性能差距如此之大?有人能详细说明在执行上述脚本时内部会发生什么情况,以及性能上的差异可能是什么情况吗
编辑 我检查了我正在运行的节点版本,以便能够比较这两个版本: Windows:
v12.11.1
WSL:v10.16.3
我正在Windows 10.0.18363上运行WSL2 N/A Build 18363
要确保此问题发生在相同版本的node I上,请将两种环境中的node升级到v12.14.1
。Windows仍然比WSL慢得多。以下是测试结果:
窗户:
WSL:
就我个人而言,我看不出有什么不同 WSL在ZSH中运行ubuntu
➜ networkPerf node app1.js
Error: connect ECONNREFUSED 127.0.0.1:9999
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1129:14) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 9999
}
Timing: 1072.149ms
➜ networkPerf node -v
v12.13.1
Windows命令提示符
StangerD@laptop c:\_stuff\code\playground\node\networkPerf
$ node app1.js
Error: connect ECONNREFUSED 127.0.0.1:9999
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1129:14) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 9999
}
Timing: 1057.658ms
StangerD@laptop c:\_stuff\code\playground\node\networkPerf
$ node -v
v12.13.1
我要检查的东西
- 节点的版本相同
- 依赖项的版本相同
- 端口9999上没有运行的服务
另外,当使用ip 127.0.0.1时,您是否看到任何差异,可能是名称解析速度慢的问题?我将
localhost
更改为127.0.0.1
,但Windows并没有更快。我确实认为我正在WSL上运行另一个版本的node,但我在Windows和WSL中升级了node,并再次运行了测试。用新的结果更新了问题。你找到解决方法了吗?
Error: connect ECONNREFUSED 127.0.0.1:9999
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1134:16) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 9999
}
Timing: 2038.687ms
Error: connect ECONNREFUSED 127.0.0.1:9999
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1134:16) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 9999
}
Timing: 18.661ms
➜ networkPerf node app1.js
Error: connect ECONNREFUSED 127.0.0.1:9999
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1129:14) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 9999
}
Timing: 1072.149ms
➜ networkPerf node -v
v12.13.1
StangerD@laptop c:\_stuff\code\playground\node\networkPerf
$ node app1.js
Error: connect ECONNREFUSED 127.0.0.1:9999
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1129:14) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 9999
}
Timing: 1057.658ms
StangerD@laptop c:\_stuff\code\playground\node\networkPerf
$ node -v
v12.13.1