dnsResolve和isInNet函数问题

我们有一个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"; } 

工作正常,但有许多用户抱怨因为proxy.pac部署时间过长导航。 看来dnsResolveisInNet是问题的原因。 有没有其他的方法来改善这个脚本? 或如何accelarte DNS解决?

你的组织中是否有多个代理服务器,这个.pac文件应该是特定于地址为10.1.1.116的服务器的? 如果没有,你可能只是摆脱检查。 由于为每个请求调用了FindProxyForURL()因此根据DNS的工作方式, dnsResolve()可能会阻止浏览器访问相当长的一段时间。

如果你需要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"; } 

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

您正在使用isInNet()检查的子网是否使用dnsDomainIs()调用来检查正在检查的域的一对一映射? 如果是这样,那么你有冗余,可以删除一个电话集。

除此之外,根据我能从你的问题中辨别出你的环境,我没有看到别的build议。

对于每个isInNet函数调用,如果主机不是IP地址,则执行DNS查找。 由于必须进行4次DNS查找并等待来自DNS服务器的响应,这会使进程减慢。 您可以执行以下操作来减less一个DNS呼叫的数量。

  function FindProxyForURL(url, host) { if (dnsResolve("ProxyServer") == "10.1.1.116") hostip=dnsResolve(host); if (dnsDomainLevels(host) == 0 || isInNet(hostip, "10.0.0.0","255.0.0.0") || isInNet(hostip, "125.0.0.0","255.0.0.0") || isInNet(hostip, "127.0.0.0","255.0.0.0") || isInNet(hostip, "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"; }