В традиционных инструкции от Google о том , как включить ga.js
использование document.write()
. Таким образом, даже если браузер каким-то образом будет асинхронно загружать внешние библиотеки JavaScript до тех пор, пока какой-то код действительно не будет выполнен, document.write()
он все равно заблокирует загрузку страницы. Более поздние асинхронные инструкцииdocument.write()
напрямую не используются , но, возможно,insertBefore
также блокируют загрузку страницы?
Однако Google устанавливает для кеша max-age
значение 86400 секунд (это 1 день и даже установлено как общедоступное , что также применимо к прокси). Таким образом, поскольку многие сайты загружают один и тот же скрипт Google, JavaScript часто будет извлекаться из кеша. Тем не менее, даже если ga.js
он кэширован, просто нажатие кнопки перезагрузки часто заставляет браузер спрашивать Google о любых изменениях . А затем, как и в случае, когда еще ga.js
не было кэшировано, браузер должен дождаться ответа, прежде чем продолжить:
ПОЛУЧИТЬ /ga.js HTTP / 1.1
Хост: www.google-analytics.com
...
If-Modified-Since: понедельник, 22 июня 2009 г., 20:00:33 GMT
Cache-Control: max-age = 0
HTTP / 1.x 304 без изменений
Последнее изменение: понедельник, 22 июня 2009 г., 20:00:33 GMT
Дата: вс, 26 июля 2009 г., 12:08:27 GMT
Cache-Control: 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 выпустила асинхронную версию . Вышесказанное должно подсказать всем, что нужно обновиться, чтобы быть уверенным, хотя обновление не решает всего .