Если Google Analytics не работает, как мне работать на моем сайте?
Хорошо, что 19 января 2013 г. 22:30 NZST и большая часть Интернета, похоже, пришли в обход, так как Google Analytics работает очень медленно. Stackoverflow, Firefox.com, reddit и поиск в Google медленны. Самое главное для меня, мой рабочий бизнес-сайт работает медленно или вообще не загружается. Нет, это не просто моя связь, которую я тестировал на моем телефоне с 3G. Сайты без Google Analytics, похоже, работают нормально.
Вот несколько скриншотов о том, что происходит
Это находится в левом нижнем углу окна Firefox. Он будет сидеть там еще 20 секунд. Я бы хотел, чтобы он ушел через 3 секунды, если он не может подключиться.
![enter image description here]()
Это вращающееся зеленое изображение находится на вкладке Firefox и просто сидит там, создавая впечатление, что страница по-прежнему загружается в течение 20 секунд. Я бы хотел, чтобы он ушел через 3 секунды, если он не может подключиться.
![enter image description here]()
Теперь, возможно, это не Google Analytics, межгосударственный шлюз моей страны может работать медленно или что-то в этом роде. Однако данные свидетельствуют о том, что это может быть Google Analytics. Теперь, даже если это не Google Analytics, я все равно буду интересоваться некоторыми методами, чтобы противостоять ему, если служба полностью отключена. Поэтому гипотетически позволяет предположить, что в центре обработки данных Google Analytics произошел мощный пожар, и системы пожаротушения не удались. Теперь Google Analytics полностью отключается в течение нескольких дней. Нет резервных серверов. Нет резервных центров обработки данных. Гипотетический сценарий в порядке. Теперь мой сайт все еще должен работать, поскольку я не могу позволить себе, чтобы мой сайт зависел от службы Google Analytics. Но функциональность аналитики была бы хороша в качестве дополнительного бонуса, если служба действительно работает своевременно.
Хорошо, поэтому я выбрасываю некоторые идеи здесь:
- Есть ли тайм-аут, который я могу добавить в свой script, который отменит подключение к Google Analytics и остановит запрос/загрузку, если он займет слишком много времени? Затем он будет продолжать загрузку моего сайта через 2 секунды.
- Или еще лучше, возможно, он может просто полностью загрузить мой сайт, а затем отправить запрос в Google Analytics с помощью Ajax после того, как мой сайт полностью завершит загрузку? Почему он не делает это по умолчанию?
Здесь код, с которым мы должны работать, который вставлен непосредственно перед закрывающим тегом </body>
.
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-123456789-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
Теперь, какие методы я мог бы использовать, чтобы исправить этот гипотетический сценарий бедствия и обеспечить непрерывность моего веб-сайта, пока Google Analytics не работает? Меня интересуют либо потенциальные программные, либо аппаратные решения. Предположим, у меня есть полный доступ к Linux VPS, на котором работает мой веб-сайт PHP/MySQL/HTML5.
Кроме того, какой авторитетный ответ на этот вопрос: некоторые люди говорят, что помещают код перед закрывающим тегом </head>
. Другие говорят, поставьте его перед закрывающим тегом </body>
. Каков наилучший способ?
Большое спасибо
Обновление решения
Хорошо, я узнал, что работает с помощью Джаспала. Решение ниже.
<script type="text/javascript">
// Load Google Analytics after my site has completely loaded
// Then when Google Analytics request is made it won't show any visuals in the browser
setTimeout(loadGoogleAnalytics, 5000);
// Setup _gaq array as global so that the code in the ga.js file can access it
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-123456789-1']);
_gaq.push(['_trackPageview']);
/**
* Loads Google Analytics
*/
function loadGoogleAnalytics()
{
var srcUrl = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
$.ajax(
{
url: srcUrl,
cache: true,
dataType: "script",
success: function(data)
{
console.log('got the script');
},
error: function()
{
console.log('failed to get the script');
},
timeout: 5000
});
};
</script>
В принципе, это работает, потому что в течение 5 секунд есть setTimeout. Это дает моей странице достаточно времени для загрузки всего содержимого, JS, CSS, изображений и т.д. Затем после этого он запускает запрос $.ajax и загружает ga.js и __utm.gif, который фактически отправляет данные в Google Analytics. После этого начальные 5 секунд, в основном все визуальные эффекты браузера, о которых я упоминал ранее, исчезают, и запрос Google Analytics происходит беззвучно в фоновом режиме без загрузки визуальных изображений для пользователя браузера. Затем я попытался заблокировать Google Analytics с файлом хоста, и я до сих пор не получаю никаких визуальных эффектов для браузера - отлично.
Следует отметить, что свойство timeout: 5000
в запросе $. ajax, похоже, ничего не делает. Первоначально я надеялся, что он прервет запрос, если он не сможет получить данные за 5 секунд, но там есть примечание в документах API, говорящих
Только в Firefox 3.0+ запросы script и JSONP не могут быть отменены по тайм-ауту; script будет работать, даже если он появится после таймаута период.
Я останусь там в любом случае на всякий случай. Из моего тестирования, если Google Analytics не будет достигнуто (от наблюдения за сетью Net/Network в Firebug/Chrome), он отменит запрос через 21-23 секунды в Firefox и 16 секунд в Chrome. Это может быть некоторый тайм-аут TCP. Я не беспокоюсь об этом, так как он тайминг молча и пользователь не заметит, поскольку в браузере нет графических изображений.
Я принял ответ Джаспала ниже и наградил его щедростью, поскольку его решение было критично для решения этого. Однако его решение по-прежнему загружает визуальные эффекты, появляющиеся в браузере. Поэтому я считаю, что решение, размещенное здесь с использованием setTimeout (небольшая модификация на его оригинальной версии), - это способ пойти и проверяется на 100% для меня.
Ответы
Ответ 1
Последний подход:
- Мы разрешаем ga нормально загружаться.
- Мы сохраняем ссылку на элемент ga dom в глобальной переменной (gaClone).
-
Мы устанавливаем тайм-аут в 30 секунд. Мы также устанавливаем другую глобальную переменную (загруженнуюGoogleAnalytics) и сначала устанавливаем ее в 0. Когда ga загружается, мы устанавливаем эту переменную в 1. В истечении времени ожидания мы проверяем, была ли загружена ga или нет. Если нет, мы удалим элемент dom ga.
<script type="text/javascript">
var loadedGoogleAnalytics = 0;
var gaClone;
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-123456789-1']);
_gaq.push(['_trackPageview']);
_gaq.push(function() {
loadedGoogleAnalytics = 1;
//console.log('GA Actualy executed!');
});
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
gaClone = ga;
})();
setTimeout(function() {
//console.log('timeout fired');
if (loadedGoogleAnalytics != 1) {
gaClone.parentNode.removeChild(gaClone);
}
}, 30000);
</script>
[Я проверил этот подход с одной из моих фактических учетных записей GA, и я могу видеть все отслеживания в реальном времени]
Предыдущий подход
[Примечание: Ga не выполняется, если мы попытаемся поместить его в (document).ready();]
[Это решение не работает]
<script type="text/javascript">
$(document).ready(function() {
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-123456789-1']);
_gaq.push(['_trackPageview']);
srcUrl = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
$.ajax({
url: srcUrl,
cache: true,
dataType: "script",
success: function(data) {
//console.log('got the script');
},
error: function() {
//console.log('failed to get the script');
},
timeout: 30000
});
});
</script>
Надеюсь, что это поможет
Ответ 2
Учитывая, где он загружен, остальная часть вашего сайта будет загружаться до запроса в Google Analytics. Плюс GA загружается асинхронно, не останавливая выполнение какого-либо из вашего кода, поэтому я действительно не вижу проблемы.
Ответ 3
Вы можете разместить копию www.google-analytics.com/ga.js
на своем собственном сервере и загрузить ее оттуда. Если вы поедете по этому маршруту, я установил задание cron для периодического получения ga.js, чтобы убедиться, что у вас самая последняя версия.
Что касается размещения кода отслеживания: одна из основных причин размещения кода отслеживания ранее на странице (до </head>
) связана с посетителями, которые быстро покидают страницу (возможно, до того, как вся страница была отображена). В этом случае вы, скорее всего, соберете некоторые данные, прежде чем ваш код отслеживания будет выполнен.
Ответ 4
Попытка исправить что-то, что не сломано
Если вы хотите использовать Google Analytics, вам понадобится общаться с сервером, каким-то образом, периодом. Служба, на которую указывают многие другие ответы, работает асинхронно, что не мешает вашему сайту работать так, как никогда. "Загрузочные визуальные эффекты" показывают, что что-то загружается... вы можете сделать это очень мало.
У вас есть два варианта; использовать аналитику Google или использовать некоторую серверную часть script для запуска аналитики.
Если веб-сайт висит, это связано с чем-то другим.
Изменить
Также не включая GA сразу же снижает точность статистики; частоты отказов, в частности, будут неверными.