Comment fonctionne _gaq.push (['_ trackPageLoadTime'])?

102

Comment fonctionne la fonctionnalité de vitesse du site de Google Analytics,, _gaq.push(['_trackPageLoadTime'])? Existe-t-il une documentation sur son fonctionnement?

ilhan
la source
2
@ stuken.yuri, c'est la syntaxe de l'appel asynchrone Google Analytics. Cela signifie essentiellement: ajoutez la fonction (nom) _trackPageLoadTimedans une file d'attente, puis lancez toutes les fonctions de cette file d'attente de manière séquentielle une fois que ga.js est chargé. Il vous permet de charger en toute sécurité de manière ga.jsasynchrone.
Yahel

Réponses:

181

Edit : Depuis le 16 novembre 2011, la _trackPageLoadTimefonction a été abandonnée et sa fonctionnalité a été définie comme paramètre par défaut . (Sur le plan fonctionnel, il est passé d'une fonctionnalité opt-in à une fonctionnalité opt-out.)

_setSiteSpeedSampleRateest la nouvelle fonction pour régler la fréquence d'échantillonnage sur cette fonction; sa valeur par défaut est 1(comme dans 1%). Pour refuser d'utiliser cette fonction de vitesse du site, vous devez passer un 0à cette fonction:

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

Depuis le centre d'aide Google Analytics :

Ce rapport prend actuellement en charge les navigateurs suivants: Chrome, Internet Explorer 9 et les versions précédentes d'Internet Explorer avec la barre d'outils Google installée. Plus précisément, les rapports sur la vitesse du site nécessitent des navigateurs prenant en charge l'interface HTML5 NavigationTiming ou la barre d'outils Google Internet Explorer installée

Ainsi, il n'implémente pas sa propre minuterie, comme de nombreuses solutions de retour à la maison précédentes, pour déterminer combien de temps il faut à une page pour se charger. Au lieu de cela, il utilise une nouvelle fonctionnalité HTML5, actuellement uniquement prise en charge dans les cas énumérés ci-dessus, appelée NavigationTiming.

ÉDITER : Ceci est maintenant pris en charge dans Firefox 7

(Il est important de noter qu'il ne s'exécute pas à chaque chargement; à la place, il échantillonne actuellement environ 2% des pages vues, bien qu'il soit configuré pour essayer de suivre tous les chargements de page sur 10% des visites; comme de plus en plus de navigateurs prennent en charge l'API NavigationTiming, vous pouvez vous attendre à ce que le pourcentage total échantillonné commence à se rapprocher de 10%.)

Cette interface est accessible sous l'objet DOM window.performance(ou, dans les versions antérieures de Chrome, window.webkitPerformance), à l'aide detiming attribut (so, window.performance.timing). L'objet stocke les valeurs mesurées de tous les temps d'événement de chargement de page clés et Google Analytics soustrait 2 des valeurs externes les plus importantes pour juger de la vitesse de chargement de la page.

Pour une charge de Mashable.com sans cache, voici un exemple de ce qu'il mesure (dans 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
}

Ces nombres sont des millisecondes d'époque, ou des millisecondes depuis le 1er janvier 1970. Je n'ai vu aucune documentation sur les valeurs qu'ils soustraient pour générer leurs valeurs, mais d'une inspection rapide du ga.js , il semble que ce soit loadEventStart-fetchStart:

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

Pour l'exemple ci-dessus, cela signifie qu'il enregistrerait 4,14 secondes dans l' _trackPageLoadTimeappel.

À partir de la spécification de synchronisation de navigation du W3C:

Attribut fetchStart

Si la nouvelle ressource doit être récupérée à l'aide de HTTP GET ou équivalent, fetchStart doit renvoyer l'heure juste avant que l'agent utilisateur ne commence à vérifier les caches d'application pertinents. Sinon, il doit renvoyer l'heure à laquelle l'agent utilisateur commence à récupérer la ressource.

Attribut loadEventStart

Cet attribut doit renvoyer l'heure immédiatement avant le déclenchement de l'événement de chargement du document actuel. Il doit renvoyer zéro lorsque l'événement de chargement n'est pas encore déclenché.

Pour les curieux, la commande semble être la suivante:

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

Pour les 0 valeurs répertoriées:

unloadEventStart et unloadEventStart afficher les heures de déchargement du chargement de la page précédente (mais uniquement si cette page a la même origine que la page actuelle.)

redirectEnd et redirectStart mesurez la latence ajoutée s'il y avait une redirection HTTP dans la chaîne de chargement de la page.

secureConnectionStart semble être une mesure facultative pour mesurer le temps de connexion SSL.

Yahel
la source
6
Vous rockez mec, sérieusement. Merci pour une réponse aussi élaborée.
Sid
secureConnectionStartest une mesure standard, mais elle est facultative pour le navigateur (ou tout ce qui gère le contenu) de rapporter. w3c-test.org/webperf/specs/NavigationTiming/…
Eric