Loading...

文章背景图

[记录] 360导致代码执行时间过长

2022-05-06
2214
-
- 分钟

同学用Electron写的项目有个需求,要获取局域网内没有被占用的IP。

写了份暴力的代码在本地测试完可行就丢过去了。

const CP = require("child_process");

new Promise((resolve, reject) => {
  const exec = CP.exec;
  const wreg = /\d+ms\sTTL\=/;
  const lreg = /icmp\_seq=\d+\sttl=\d+/;
  const ips = [];
  const promises = [];
  console.log(process.platform);
  console.time(1)
  for (let i = 0; i <= 255; i++) {
    promises[i] = new Promise(resolve => {
      console.timeLog(1, `${i}进入Promise`)
      if (process.platform === "win32") {
        exec(`ping 192.168.1.${i} -4 -n 1 -w 3`, (err, stdout, stderr) => {
          console.timeLog(1, `${i}完成`)
          const rs = stdout.split("\n").slice(2, 5);
          const flag = rs.some(str => wreg.test(str));
          if (!flag) {
            ips.push(`192.168.1.${i}`);
          }
          resolve();
        });
      } else {
        exec(`ping 192.168.1.${i} -4 -c 1 -w 3`, (err, stdout, stderr) => {
          console.timeLog(1, `${i}完成`)
          const rs = stdout.split("\n").slice(1, 2);
          const flag = rs.some(str => lreg.test(str));
          if (!flag) {
            ips.push(`192.168.1.${i}`);
          }
          resolve();
        });
      }
    });
  }

  Promise.all(promises).then(res => {
    if (res.length == 256) {
      console.timeEnd(1);
      console.log(ips);
    }
  })
});

本地测下来4秒左右能获取到所有未占用的ip,但是他那边却需要26秒才能完成。

通过console.timeLog发现他才每次进入Promise函数时所花费的时间特别高,浮动也很高快的时候十几ms,慢的时候几百ms。

不严谨测试数据

CPU 核心数 系统 Node版本 创建耗时 完成耗时
Intel Xeon Gold 6133 2C/2T Debian 11(5.10.0-12-amd64) v16.14.1 997.808ms 4.187s(10.743s)
AMD Ryzen 7 4800U 8C/16T Windows10 21H1 19043.1645(开启Windows安全中心) v16.13.2 3.965s 4.141s
AMD Ryzen 7 4800U 8C/16T Windows10 21H1 19043.1645(关闭Windows安全中心) v16.13.2 3.188s 3.516s
Intel Core I5 10400 6C/12T Windows10 20H2 19042.1645(开启360) v16.14.0 23.168S 26.514s
Intel Core I5 10400 6C/12T Windows10 20H2 19042.1645(关闭360) v16.14.0 1.853s 5.628s
Intel Celeron N3150 2C/4T Debian11(5.11.22-1-pve) v16.13.2 1.701s 4.763s(10.358s)

测试下来,貌似是360做了什么操作,导致用时过长。

Windows安全中心虽然也点影响,但并没有360那么大。

评论交流

文章目录