У традиційних інструкції від Google про те , як включити ga.js
використання document.write()
. Отже, навіть якщо браузер якось асинхронно завантажує зовнішні бібліотеки JavaScript, доки насправді не буде виконано якийсь код, document.write()
він все одно заблокує завантаження сторінки. Пізніші асинхронні інструкції не використовують document.write()
безпосередньо, але, можливо, insertBefore
також блокують завантаження сторінки?
Однак Google встановлює кеш-пам’яті max-age
на 86 400 секунд (це 1 день і навіть встановлюється як загальнодоступний , що також застосовується до проксі-серверів). Отож, оскільки багато сайтів завантажують той самий сценарій Google, JavaScript часто витягується з кешу. Тим не менше, навіть коли ga.js
кешовано, просто натискання кнопки перезавантаження часто змушує браузер запитувати Google про будь-які зміни . І тоді, як і коли ga.js
ще не було кешовано, браузер повинен чекати відповіді, перш ніж продовжувати:
ОТРИМАЙТЕ /ga.js HTTP / 1.1
Ведучий: www.google-analytics.com
...
Якщо модифіковано-з: Понеділок, 22 червня 2009 р. 20:00:33 GMT
Керування кешем: max-age = 0
HTTP / 1.x 304 Не змінено
Останнє оновлення: Mon, 22 Jun 2009 20:00:33 GMT
Дата: неділя, 26 липня 2009 р. 12:08:27 GMT
Керування кешем: max-age = 604800, загальнодоступний
Сервер: Гольф
Зверніть увагу, що багато користувачів натискають кнопку перезавантажити для новинних сайтів, форумів та блогів, які вони вже відкрили у вікні браузера, змушуючи багатьох браузерів блокувати, поки не отримає відповідь від Google . Як часто ви перезавантажуєте домашню сторінку SO? Коли відповідь Google Analytics повільна, тоді такі користувачі відразу помітять. (У мережі опубліковано багато рішень для асинхронного завантаження ga.js
сценарію, особливо корисних для таких сайтів, але, можливо, вже не кращих, ніж оновлені інструкції Google.)
Після завантаження та виконання JavaScript фактичне завантаження веб-помилки (зображення відстеження) має бути асинхронним. Отже, завантаження зображення для відстеження не повинно блокувати нічого іншого, якщо тільки сторінка не використовуєbody.onload()
. У цьому випадку, якщо веб-помилка не вдається завантажити негайно, натискання кнопки перезавантажити насправді погіршує ситуацію, оскільки натискання кнопки перезавантаження також призведе до того, що браузер знову запитає сценарій, як If-Modified-Since
описано вище. До перезавантаження браузер чекав лише веб-помилки, тоді як після натискання кнопки перезавантаження він також потребує відповіді на ga.js
сценарій.
Отже, сайти, що використовують Google Analytics, не повинні використовуватиbody.onload()
. Натомість слід використовувати щось на кшталт події jQuery $ (document) .ready () або domready MooTools .
Див. Також Функціональний огляд Google , який пояснює, як Google Analytics збирає дані? , включаючи те, як працює код відстеження . (Це також робить офіційним, що Google збирає вміст сторонніх файлів cookie. Тобто: файли cookie з веб-сайту, який ви відвідуєте.)
Оновлення: у грудні 2009 року Google випустив асинхронну версію . Вищезазначене повинно сказати всім, щоб оновити, щоб бути впевненим, хоча оновлення не вирішує все .