Otimizando o tempo de carregamento do site – parte 1

Quando você acessa um desses grandes portais da Internet e vê a página carregar em segundos logo acredita que isso tudo acontece porque eles tem um link com uma banda gigantesca, servidores super-poderosos, e diversos tipos de dispositivos de hardware para fazer cache, otimização e etc.

Provalvelmente tudo isso é verdade, mas mesmo assim, há algumas técnicas que são utilizadas para otimizar o tempo de carregamento das páginas de um site que estão disponíveis à sua mão.

Com isso em mente, resolvi criar alguns posts falando de algumas técnicas que você pode adotar para melhorar o desempenho do seu site. Dentre os assuntos que vou abordar merecem destaque:

  • paralelização de requests
  • utilização de compressão
  • redução de espaços em branco das páginas
  • evitar a serialização de download do javascript
  • otimização de tamanho das imagens
  • cache do lado do servidor
  • cache do lado do cliente

Neste post vou falar de um tópico bem simples, mas que a grande maioria dos administradores e desenvolvedores Web desconhece: Paralelização de Requests

Se você ainda usa ou lembra-se, o Internet Explorer 6.0 só “conseguia” fazer dois downloads simultâneos de uma só vez. Provavelmente você se questionou (ou reclamou veemente) sobre o porquê desta limitação absurda. Pois bem, eis aí uma novidade das velhas: O RFC2616, que define o protocolo HTTP 1.1, na seção 8.1.4 diz o seguinte:

Clients that use persistent connections SHOULD limit the number of simultaneous connections that they maintain to a given server. A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy.

Ou seja, o Internet Explorer 7 (e anteriores) simplesmente obedece o que está escrito na definição do protocolo HTTP 1.1. Porém, o mundo às vezes é dos espertos, e outros navegadores passaram a ignorar esta recomendação (Por exemplo, o Firefox abre 10 conexões simultâneas) e por isso usam melhor a banda, parecendo ser mais rápidos. (Veja https://blogs.msdn.com/b/ie/archive/2005/04/11/407189.aspx para mais detalhes sobre isso).

Com o IE8 este limite foi aumentado para 6 conexões simultâneas, mas mesmo assim ainda é um limitador. Muito bem, uma vez que isso é uma realidade, como podemos “paralelizar” o maior número de requests possíveis? Ora, com uma solução bem simples, adotada por todos os grandes portais: a divisão do site em “sub-domínios”.

Por exemplo, imagine que hoje o seu site tenha a seguinte estrutura de URLs:

- https://www.meusite.com.br
- https://www.meusite.com.br/static
- https://www.meusite.com.br/imagens
- etc…

Com essa configuração, cada cliente irá abrir de 2 até 10 (dependendo do navegador que ele use) conexões simultâneas para o seu site. Todavia, se você criar subdomínios, um para cada tipo de conteúdo, você conseguirá muito mais. Por exemplo:

- https://www.meusite.com.br/
- https://static.meusite.com.br
- https://imagens.meusite.com.br/

Com isso você conseguirá as mesmas 10 conexões simultâneas para cada domínio, mas como são três domínios diferentes, teremos 30 conexões simultâneas, o que torna a utilização da banda muito mais eficiente, e em consequência, diminui o tempo de carga das páginas.

Num próximo post vou falar sobre um recurso do IIS7.x que facilita a criação dessa nova estrutura sem ter que mudar o conteúdo do site. Fique ligado!

Um abraço e até a próxima.

Paulo