dnsResolve e funções isInNet

5

Temos um arquivo 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";
}

Está funcionando corretamente, mas há muitos usuários que estão reclamando porque a implantação do proxy.pac está demorando muito. Parece que dnsResolve e isInNet são a causa do problema. Existe alguma outra maneira de melhorar este script? ou como acelarte dns resolve?

    
por carloslone 14.02.2011 / 17:13

2 respostas

5

Você tem vários servidores proxy em sua organização e esse arquivo .pac deve ser específico do servidor com o endereço 10.1.1.116? Se não, você provavelmente pode simplesmente se livrar desse cheque. Como FindProxyForURL() é chamado para cada solicitação, seu navegador precisa fazer com que dnsResolve() possa bloquear seu navegador por um bom tempo, dependendo de quão bem o DNS funciona.

Se você precisar da chamada dnsResolve() , uma maneira de contornar isso é movê-la para fora de 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";
}

Essa alteração fará com que dnsResolve() seja chamado apenas quando o arquivo .pac for carregado, em vez de sempre que uma solicitação for feita ao navegador. Você precisará determinar por si mesmo se isso é algo que você pode fazer em seu ambiente com base na freqüência com que esse endereço seria alterado. Mas, novamente, o endereço do seu servidor proxy deve ser estático.

As sub-redes que você está verificando com isInNet() chama um mapa de um para um dos domínios que você está verificando com as dnsDomainIs() chamadas? Se sim, então você tem redundância e pode remover um conjunto de chamadas.

Além disso, não vejo mais nada para recomendar com base no que posso discernir sobre seu ambiente a partir de sua pergunta.

    
por 14.02.2011 / 18:21
2

Para cada chamada de função isInNet, uma pesquisa de DNS é feita se o host não for um endereço IP. Isso reduzirá o processo, pois você terá que fazer 4 pesquisas de DNS e aguardar a resposta do servidor DNS. Você pode fazer o seguinte para reduzir o número de chamadas DNS para um.

 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";
}
    
por 05.01.2012 / 13:14