Подтвердить что ты не робот

Если 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% для меня.

4b9b3361

Ответ 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 сразу же снижает точность статистики; частоты отказов, в частности, будут неверными.