Como o _gaq.push (['_ trackPageLoadTime']) funciona?

102

Como funciona o recurso de velocidade do site do Google Analytics,, _gaq.push(['_trackPageLoadTime'])? Existe alguma documentação sobre como funciona?

ilhan
fonte
2
@ stuken.yuri é a sintaxe para a chamada assíncrona do Google Analytics. Basicamente, significa: adicionar a função (nome) _trackPageLoadTimeem uma fila e, em seguida, disparar todas as funções nessa fila sequencialmente, depois que ga.js for carregado. Ele permite que você carregue com segurança de forma ga.jsassíncrona.
Yahel

Respostas:

181

Editar : em 16 de novembro de 2011, a _trackPageLoadTimefunção foi descontinuada e sua funcionalidade foi definida como uma configuração padrão . (Falando funcionalmente, deixou de ser um recurso opcional para ser um recurso opcional.)

_setSiteSpeedSampleRateé a nova função para definir a taxa de amostragem neste recurso; seu valor padrão é 1(como em 1%). Para optar por não usar o recurso Velocidade do site, você deve passar um 0para esta função:

_gaq.push(["_setSiteSpeedSampleRate", 0]);

Na Central de Ajuda do Google Analytics :

Este relatório atualmente oferece suporte aos seguintes navegadores: Chrome, Internet Explorer 9 e versões anteriores do Internet Explorer com a Barra de Ferramentas Google instalada. Mais especificamente, os relatórios de velocidade do site exigem navegadores que suportem a interface HTML5 NavigationTiming ou que tenham a barra de ferramentas do Google Internet Explorer instalada

Portanto, ele não implementa seu próprio cronômetro, como muitas soluções anteriores de homeback faziam, para descobrir quanto tempo leva para uma página carregar. Em vez disso, ele usa um novo recurso HTML5, atualmente suportado apenas nos casos listados acima, chamado NavigationTiming.

EDITAR : Agora é compatível com Firefox 7

(É importante observar que ele não é executado em todos os carregamentos; em vez disso, ele atualmente obtém amostras de cerca de 2% das visualizações de página, embora esteja configurado para tentar rastrear todos os carregamentos de página em 10% das visitas; à medida que mais navegadores suportam a API NavigationTiming, você pode esperar que a porcentagem total da amostra comece a se aproximar de 10%.)

Essa interface é acessada sob o objeto DOM window.performance(ou, em versões anteriores do Chrome, window.webkitPerformance), usando o timingatributo (so, window.performance.timing). O objeto armazena valores medidos de todos os tempos de evento de carregamento da página principal, e o Google Analytics subtrai 2 dos valores externos mais importantes para julgar a velocidade de carregamento da página.

Para carregar o Mashable.com sem cache, aqui está um exemplo do que ele mede (no Chrome 11):

timing = {
  connectEnd: 1306677079337,
  connectStart: 1306677079337,
  domComplete: 1306677083482,
  domContentLoadedEventEnd: 1306677081765,
  domContentLoadedEventStart: 1306677081576,
  domInteractive: 1306677081576,
  domLoading: 1306677079478,
  domainLookupEnd: 1306677079337,
  domainLookupStart: 1306677079337,
  fetchStart: 1306677079337,
  loadEventEnd: 1306677083483,
  loadEventStart: 1306677083482,
  navigationStart: 1306677079337,
  redirectEnd: 0,
  redirectStart: 0,
  requestStart: 1306677079394,
  responseEnd: 1306677079669,
  responseStart: 1306677079476,
  secureConnectionStart: 0,
  unloadEventEnd: 0,
  unloadEventStart: 0
}

Esses números são milissegundos de época, ou milissegundos desde 1 de janeiro de 1970. Não vi nenhuma documentação sobre quais valores eles subtraem para gerar seus valores, mas de uma inspeção rápida do ga.js , parece que é loadEventStart-fetchStart:

h&&h[c]!=k&&h.isValidLoadTime?b=h[c]:e&&e[a]&&(b=e[a].loadEventStart-e[a].fetchStart);

Para o exemplo acima, isso significa que registraria 4,14 segundos na _trackPageLoadTimechamada.

Da especificação de tempo de navegação do W3C:

Atributo fetchStart

Se o novo recurso for buscado usando HTTP GET ou equivalente, fetchStart deve retornar a hora imediatamente antes que o agente do usuário comece a verificar quaisquer caches de aplicativos relevantes. Caso contrário, ele deve retornar a hora em que o agente do usuário começa a buscar o recurso.

Atributo loadEventStart

Este atributo deve retornar a hora imediatamente antes do evento de carregamento do documento atual ser disparado. Deve retornar zero quando o evento de carregamento ainda não foi disparado.

Para curiosos, a ordem parece ser a seguinte:

connectStart, connectEnd, domainLookupStart, domainLookupEnd, fetchStart, navigationStart, requestStart, responseStart, domLoading, responseEnd, domContentLoadedEventStart, domInteractive, domContentLoadedEventEnd, domComplete, loadEventStart, loadEventEnd

Para os 0 valores listados:

unloadEventStarte unloadEventStartmostra os tempos de descarregamento do carregamento da página anterior (mas apenas se essa página tiver a mesma origem da atual.)

redirectEnde redirectStartmedir a latência adicionada se houver um redirecionamento HTTP na cadeia de carregamento da página.

secureConnectionStart parece ser uma medida opcional para medir o tempo de conexão SSL.

Yahel
fonte
6
Você arrasa cara, sério. Obrigado por uma resposta tão elaborada.
Sid
secureConnectionStarté uma medida padrão, mas é opcional para o navegador (ou qualquer outra coisa que lida com o conteúdo) relatar. w3c-test.org/webperf/specs/NavigationTiming/…
Eric