dnsResolve 和 isInNet 函数问题

car*_*one 5 domain-name-system proxy pac

我们有一个 Proxy.pac 文件:

function FindProxyForURL(url, host) {
  if (dnsResolve("ProxyServer") == "10.1.1.116")
    if (dnsDomainLevels(host) == 0 ||
        isInNet(host, "10.0.0.0","255.0.0.0") ||
        isInNet(host, "125.0.0.0","255.0.0.0") ||
        isInNet(host, "127.0.0.0","255.0.0.0") ||
        isInNet(host, "204.223.70.250","255.255.255.255") ||
        dnsDomainIs(host, ".muj.com") ||
        dnsDomainIs(host, "sv.com.gt") ||
        dnsDomainIs(host, "com.es.gt"))
      return "DIRECT";
    else return "PROXY 10.1.1.116:8080";

  else return "DIRECT";
}
Run Code Online (Sandbox Code Playgroud)

工作正常,但有很多用户抱怨因为 proxy.pac 部署需要很长时间的导航。这似乎dnsResolveisInNet是问题的原因。有没有其他方法可以改进这个脚本?或者如何加速dns解析?

squ*_*man 5

您的组织中是否有多个代理服务器并且此 .pac 文件应该特定于地址为 10.1.1.116 的服务器?如果没有,您可能可以摆脱该检查。由于FindProxyForURL()为您的浏览器需要发出的每个请求调用dnsResolve()它可能会在相当长的一段时间内阻止您的浏览器,具体取决于您的 DNS 的工作情况。

如果你需要那个dnsResolve()电话,那么解决这个问题的一种方法是将它移到 之外FindProxyForURL()

var myProxyServerIP = dnsResolve("ProxyServer");

function FindProxyForURL(url, host) {
  if (myProxyServerIP == "10.1.1.116")
    if (dnsDomainLevels(host) == 0 ||
        isInNet(host, "10.0.0.0","255.0.0.0") ||
        isInNet(host, "125.0.0.0","255.0.0.0") ||
        isInNet(host, "127.0.0.0","255.0.0.0") ||
        isInNet(host, "204.223.70.250","255.255.255.255") ||
        dnsDomainIs(host, ".muj.com") ||
        dnsDomainIs(host, "sv.com.gt") ||
        dnsDomainIs(host, "com.es.gt"))
      return "DIRECT";
    else return "PROXY 10.1.1.116:8080";

  else return "DIRECT";
}
Run Code Online (Sandbox Code Playgroud)

此更改将使其dnsResolve()仅在加载 .pac 文件时调用,而不是每次向浏览器发出请求时调用。您需要根据地址更改的频率自行确定是否可以在您的环境中执行此操作。但同样,您的代理服务器的地址应该是静态的。

您通过isInNet()调用检查的子网是否是您通过调用检查的域的一对一映射dnsDomainIs()?如果是这样,那么您在那里有冗余,并且可以删除一组调用。

除此之外,根据我从您的问题中对您的环境的了解,我看不到其他任何建议。