Javascript NodeJS(通用JS)比较IP地址

Javascript NodeJS(通用JS)比较IP地址,javascript,arrays,node.js,comparison,Javascript,Arrays,Node.js,Comparison,我使用以下代码来比较返回的IP地址(使用与express类似的node restify): var checkIP=函数(配置,请求){ var ip=req.connection.remoteAddress.split('.'), 库里普, B 块=[]; 对于(var i=0,z=config.ips.length-1;i如果我的直觉是正确的,您现在可能正在做大量额外的工作: 对于config.ips数组中的每个IP表达式,您的代码正在解析和比较: if (block[0] &&am

我使用以下代码来比较返回的IP地址(使用与express类似的node restify):

var checkIP=函数(配置,请求){
var ip=req.connection.remoteAddress.split('.'),
库里普,
B
块=[];

对于(var i=0,z=config.ips.length-1;i如果我的直觉是正确的,您现在可能正在做大量额外的工作:

对于config.ips数组中的每个IP表达式,您的代码正在解析和比较:

if (block[0] && block[1] && block[2] && block[3]) {
        return true;
 }
^^^请注意,在每个IP计算此表达式4次的迭代过程中,您已经完成了获取所有4个块的工作:
(curIP[b]==IP[b]| | curIP[b]==='*')
,因此上面的ANDing并没有阻止已经发生的工作的开销

我有两个想法:

  • 由于IP地址无论如何都是字符串,*符号适合正则表达式来完成这项工作,而不是进行拆分和比较?因此,作为下一步,您可以研究实现正则表达式来完成这项工作,而不是.split()和compare,并测试其性能

  • 或者,你可以想办法避免总是比较各个部分所带来的开销,在可能的情况下比较各个部分,然后在必要时才重新比较各个部分。 如果你想读一些C代码,这里是如何在幕后进行的。看看\u domain
  • 中名为
    的函数,可以获得一些灵感

    祝你好运,希望这有帮助

    if (block[0] && block[1] && block[2] && block[3]) {
            return true;
     }