Acelerar a navegação utilizando o DNS Prefetching

2
2543

Entendendo o problema

O tempo de resolução de DNS pode levar ao usuário uma quantidade significativa de latência. O tempo que leva a resolução de DNS é altamente variável. Latência atrasos variam de cerca de 1ms (resultados em cache local) para comumente reportados tempos de vários segundos.

A solução

O DNS Prefetching é uma tentativa de resolver nomes de domínios antes que um usuário tente acessar um link. Isso é feito usando o mecanismo de resolução de DNS normal do computador; nenhuma conexão com o Google é usado. Uma vez que um nome de domínio foi resolvido, se o usuário não navegar para esse domínio, não haverá atraso eficaz devido ao tempo de resolução de DNS. O exemplo mais óbvio em DNS prefetching pode ajudar é quando um usuário está olhando para uma página com muitos links para vários domínios, tais como uma página de resultados de pesquisa.

Quando nos deparamos com hiperlinks em páginas, extraímos o nome de domínio de cada um e resolver cada domínio para um endereço IP. Todo este trabalho é feito em paralelo com a leitura do usuário da página, usando CPU e recursos de rede mínimas. Quando um usuário clica em qualquer um desses nomes pré-resolvido, eles vão economizar em média cerca de 200 milissegundos em sua navegação (supondo que o usuário não tinha já visitou o domínio recentemente). Mais importante do que a economia média, os usuários não tendem a experimentar os “piores casos” atrasos para a resolução de DNS, que são regularmente mais de 1 segundo.

Dns Prefetch google page speed

Arquitetura

Implementação do Chromium do DNS Prefetching não usa pilha de rede do navegador em tudo. Em vez disso, ele conta com rosca externa para resolver os nomes, aquecendo assim o cache de DNS do sistema operacional (ignorando completamente qualquer cache na pilha de rede do aplicativo). A vantagem desta abordagem é que era completamente compatível com todas as pilhas de rede (que é externo), e impedido regressões acidental na pilha de rede principal.

Uma vez que algumas resoluções DNS podem levar um longo tempo, é fundamental que tais atrasos em uma resolução não deve causar atrasos em outras resoluções. Para este fim (no Windows, onde não há suporte nativo para a resolução de DNS assíncrono), Chromium atualmente emprega 8 threads de trabalho completamente assíncronos para fazer nada além de executar a resolução de pré-busca DNS. Cada segmento de trabalho simplesmente espera em uma fila, obtém o próximo nome de domínio solicitado, em seguida, os blocos em uma função síncrona resolução do Windows. Eventualmente, o sistema operacional responde com uma resolução de DNS, o segmento em seguida, descarta-lo (deixando o cache OS aquecido!), E aguarda o próximo pedido de pré-busca. Com 8 threads, é raro que mais do que um ou dois tópicos irá bloquear extensivamente, e mais resolução proceder rapidamente (ou tão rapidamente como DNS pode atendê-los!).

Colocando o DNS Prefetching em sua página

Chromium usa o atributo “href” de hyperlinks para encontrar nomes de host para pré-busca. No entanto, alguns desses hyperlinks pode ser redirecionamentos, por exemplo, se o site está tentando contar quantas vezes o link é clicado. Nessas situações, o “verdadeiro” domínio de destino não é necessariamente perceptível através da análise do conteúdo de uma página web, e assim Chromium não é capaz de pré-busca o domínio final almejado.

Para melhorar a velocidade de redirecionamentos, autores de conteúdo pode adicionar a seguinte tag para sua página:

<link rel="dns-prefetch" href="//nome_do_host_prefetch.com">

A tag acima “link rel” não tem impacto sobre o processamento visual da página, mas faz com que Chromium a pré-busca a resolução DNS de “nome_do_host_prefetch.com” como se houvesse um href real orientadas para um caminho nesse domínio. As barras duplas indicam que a URL começa com um nome de host (conforme especificado no RFC 1808). É equivalente (mas desnecessário) para usar uma URL completa, como “http://nome_do_host_prefetch.com/”.
Prefetch Controle DNS

Por padrão, o Chromium não os nomes de host de pré-busca em hiperlinks que aparecem em páginas HTTPS. Esta restrição ajuda a prevenir um bisbilhoteiro de inferir os nomes de host de hyperlinks que aparecem em páginas HTTPS com base no tráfego de pré-busca DNS. A única exceção é que o cromo pode periodicamente re-resolver o domínio da página HTTPS si.

Um conteúdo autor inquisitivo (por exemplo, um comentarista em um blog) podem abusar prefetching DNS para tentar controlar a visualização de conteúdo contendo links. Por exemplo, as ligações com novos subdomínios, quando resolvidos durante a pré-busca, pode notificar resolver um domínio que um link foi visto, mesmo se ele não foi clicado. Em alguns desses casos, a autoridade que serve o conteúdo (como o proprietário de um blog, ou servidor webmail) pode querer exclua esse monitoramento abusivo.

Para permitir que os webmasters para controlar se prefetch DNS está habilitado ou desabilitado, Chromium inclui um mecanismo de controle Prefetch DNS. Ele pode ser usado para transformar prefetch DNS por páginas HTTPS, ou desligá-lo para páginas HTTP.

Utilização típica

Se um usuário resolvido um nome de domínio para um endereço IP, recentemente, o seu sistema operacional vai se lembrar (cache) a resposta, e, em seguida, o tempo de resolução pode ser tão baixo quanto 0-1ms (um milésimo de segundo). Se a resolução não está em cache e precisa localmente “sair pela rede”, em seguida, um mínimo de tempo de resolução é de cerca de 15 ms, assumindo um firewall nas proximidades (roteador em casa?) Tem uma resposta em cache para a questão. A maioria dos nomes comuns, como google.com e yahoo.com são resolvidos com tanta frequência que resolvedores de nome do ISP mais local pode atender mais perto de 80-120ms. Se o nome de domínio em questão é um nome incomum, em seguida, uma consulta pode ter de passar por inúmeros resolvedores cima e para baixo da hierarquia, e o atraso pode média mais perto de 200-300ms. Mais interessante, para qualquer uma destas consultas que acessam a internet, pacotes descartados, e excesso de trabalho (sob provisionados) resolvedores de nome, regularmente aumenta o tempo total de resolução de entre 1 e 10 segundos.

Uso da Rede

Resoluções DNS usam um sistema hierárquico, onde cada nível na hierarquia tem um cache, para lembrar as resoluções anteriores. Como resultado, as resoluções extras geralmente não falar causa o uso da internet end-to-end. As resoluções só ir tão longe quanto necessário para o resolver “autoritário”, parando quando atingem um resolvedor que já tem a resolução em um cache. Além disso, os pedidos de resolução de DNS são muito leve. Cada pedido tipicamente envolve o envio de um único pacote UDP que é menos de 100 bytes para fora, e recebendo de volta uma resposta que é de cerca de 100 bytes. Este impacto mínimo sobre o uso da rede é compensada por uma melhoria significativa na experiência do usuário.

Despejo Cache

Cache DNS da máquina local é bastante limitada. As estimativas atuais para o número de resoluções lembradas em uma caixa de Windows XP estão na faixa de 50-200 nomes de domínio. Como resultado, se “muitas” resoluções são feitas, em seguida, algumas resoluções “necessárias” pode ser “expulsos” do cache para abrir espaço para os novos prefetches. Chromium tenta modelar o cache subjacente, e acho que quando há uma chance de que uma resolução de domínio “em breve será necessário” foi despejada. Quando Chromium decide uma expulsão pode ter ocorrido, ele pode resolver automaticamente o nome de domínio novamente, garantindo que o mesmo seja recarregado no cache, ou marcados como “usado recentemente” para que ele não vai ser despejado por um “tempo”. Despejos de cache causadas por Chromium pode ter um impacto negativo sobre outras aplicações que não fazer (ainda) utilizam técnicas de pré-busca para manter o cache subjacente “quente”.

Muitos sites grandes de internet (google.com, yahoo.com, etc.) geralmente marcam as resoluções nomes de domínio com um tempo de expiração, no tempo de 5 minutos. Eles provavelmente definem o tempo de expiração para ser curto para que eles possam responder melhor às mudanças na oferta e demanda por seus serviços. Este, por sua vez, tende causa despejos de cache. Como resultado, a maioria dos aplicativos tendem a enfrentar o problema de cache de despejo, e já empregam diversos métodos para reduzir o impacto.

Exemplo de como melhorar a demora do carregamento da API do Facebook

acrescente logo após a tag title o seguinte código:

<link rel="dns-prefetch" href="//facebook.com">
<link rel="dns-prefetch" href="//fbcdn-profile-a.akamaihd.net">

2 COMENTÁRIOS

  1. tenho uma pergunta, no caso se eu quiser colocar como por exemplo o (Dsiqus) em vez do facebook no meu blogger, eu posso colocar sem me preocupar ?

DEIXE UMA RESPOSTA

Please enter your comment!
Please enter your name here