Функции 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 занимает много времени. Похоже на то dnsResolve
а также isInNet
являются причиной проблемы. Есть ли другой способ улучшить этот скрипт? или как разрешить днс решить?
2 ответа
Есть ли в вашей организации несколько прокси-серверов, и предполагается, что этот файл.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";
}
Это изменение сделает так, чтобы dnsResolve()
вызывается только при загрузке файла.pac, а не каждый раз, когда в браузер делается запрос. Вам нужно будет определить, можете ли вы что-то сделать в своей среде, исходя из того, как часто этот адрес будет меняться. Но опять же, адрес вашего прокси-сервера должен быть статическим.
Подсети проверяются с помощью isInNet()
вызывает один-к-одному карту доменов, которые вы проверяете с помощью dnsDomainIs()
звонки? Если это так, то у вас есть резервирование и вы можете удалить один набор вызовов.
Кроме этого, я не вижу ничего другого, что можно было бы рекомендовать, исходя из того, что я могу отличить вашу среду от вашего вопроса.
Для каждого вызова функции isInNet выполняется поиск DNS, если хост не является IP-адресом. Это замедлит процесс, так как вам придется выполнить 4 поиска DNS и ждать ответа от DNS-сервера. Вы можете сделать следующее, чтобы уменьшить количество вызовов 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";
}