Когда и как выполняется Асинхронная Google Analytics? - PullRequest
9 голосов
/ 04 марта 2010

Я переключаю наш сайт, чтобы использовать асинхронную Google Analytics, и мне любопытно, как он переносит события в массив _gaq. Насколько я могу судить, события помещаются в шаблон ожидания в _gaq во время асинхронной загрузки скрипта ga.js. Они запускаются после загрузки скрипта, и как отслеживаются события загрузки после документа?

Один из примеров - пользователь, щелкающий ссылку через 10 секунд после загрузки страницы - согласно документации, событие должно быть помещено в _gaq. Как сценарий аналитики обнаруживает это?

Ответы [ 2 ]

8 голосов
/ 05 марта 2010

Общая часть лучше всего описана в Google Analytics Async doc .

Чтобы отправить вызов API в очередь, вы должны преобразовать его из традиционного синтаксиса JavaScript в массив команд. Массивы команд - это просто массивы JavaScript, которые соответствуют определенному формату. Первый элемент в массиве команд - это имя метода объекта трекера, который вы хотите вызвать. Это должна быть строка. Остальные элементы - это аргументы, которые вы хотите передать методу объекта трекера. Это может быть любое значение JavaScript.

Я постараюсь объяснить сочные детали: _gaq - это простой JavaScript-массив, и у всех массивов есть метод push для добавления записи в конец массива. Таким образом, перед загрузкой сценария Analytics все команды будут помещены в массив. В конце сценария Analytics он заменяет метод _gaq.push пользовательским методом и выполняет все записи в массиве _gaq. Новый метод _gaq.push немедленно запустит метод отслеживания. Поэтому, когда вы запускаете метод push через 10 секунд после загрузки страницы, команда должна быть выполнена.

0 голосов
/ 05 марта 2010

Всегда сложно скрыть код Google Analytics, но если бы я решил эту проблему, при загрузке скрипта я бы переопределил функцию push в массиве после обработки всего в очереди невыполненных работ (_gaq). Таким образом, переопределенная функция push будет просто действовать как прокси для фактических вызовов функций для объекта pageTracker.

Вот простой пример переопределения метода push для объекта массива:

var foo = [];
foo.push("one");                      // pushes "one" onto the array
foo.push("two");                      // pushes "two" onto the array
foo.push = function(a) { alert(a) };  // redefines `push`
foo.push("three");                    // alerts "three"
alert(foo);                           // alerts "one,two"
...