Node.js Windows上的NodeJS`net`模块慢恢复

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

在NodeJS的
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上没有运行的服务
另外,您在wsl1 windows 10.0.17134 Build 17134上使用的wsl版本是什么
另外,当使用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