Como evitar problemas com o servidor externo de Javascript?

2

Eu tenho tido um problema estranho com bibliotecas JavaScript vinculadas externamente ao suspender meu servidor de balanceador de carga que executa o HAProxy. Recentemente, integrei o script de monitoramento Quantcast e ele funcionou por cerca de 12 horas. Na manhã seguinte, tive uma enorme quantidade de conexões de rede penduradas, como mostra o gráfico abaixo. Todos os servidores da Web atrás do meu balanceador de carga estavam completamente sobrecarregados com conexões também. Eu removi o script Quantcast e o problema desapareceu.

Eu tive esse problema com alguns outros pacotes de análise, mas nunca tive esse problema com o Google Analytics ou o Adsense (ambas as bibliotecas externas). Alguém já experimentou isso ou tem sugestões sobre como evitar que isso aconteça?

Gráfico do Netstat

    
por Aldie 08.08.2009 / 20:03

4 respostas

1

Tem certeza de que é causado por javascript?

Onde você colou a tag quantcast? Experimente no final da página, logo acima, para não atrasar o carregamento de outros recursos (img, css, etc).

Os navegadores "param" se tiverem que esperar pelo javascript, mas isso é apenas porque ele precisa pausar o encadeamento de renderização para aguardar o document.write no script. Não é possível manter a conexão tcp com a porta 80 aberta, exceto quando você tem um problema de carregamento de recursos.

O gráfico se parece mais com um problema de falta de memória, se você executar o mpm-prefork, certifique-se de que o MaxClients não esteja muito alto ou que você irá executar swap, levando a muitas conexões estabelecidas mas nada sendo servido. Além disso, verifique as configurações do http keepalive.

    
por 30.08.2009 / 13:04
0

Geralmente, armazenamos em cache os javascripts externos localmente. Dessa forma, você não precisa depender de um terceiro que atenda o JS corretamente. Claro, isso pode não ser uma opção dependendo do que o js está fazendo ou se é construído dinamicamente. Mas você pode, por exemplo, hospedar o js do Google Analytics localmente.

Você pode ganhar algumas vantagens adicionais para fazer isso, como

  1. Gzip - alguns arquivos js externos não serão gzipados    
  2. Cabeçalhos de cache - você pode definir seus cabeçalhos de cache para nunca expirarem (lidar com atualizações com uma alteração de nome de arquivo)     
  3. Mais controle - é claro que os grandes caras geralmente não vão introduzir uma mudança urgente, mas ter um javascript vinculado externamente pode ser arriscado.
por 02.09.2009 / 01:36
0

Usando o evento window.onload, você pode acrescentar Javascript externo (com document.write simples ou construção DOM) somente quando a página estiver totalmente carregada (e a conexão for fechada).

    
por 03.09.2009 / 11:02
0

Tente adiar a execução do script com o atributo defer:

<script src="script.js" type="text/javascript" defer="defer"></script>

Ele diz ao navegador para não pensar no script até que a página seja carregada. Se não houver document.write no script, pode ser adiado.

    
por 08.10.2009 / 18:02