13

わかりました。2013年1月19日22:30NZSTで、Google Analyticsの実行速度が非常に遅いため、ほとんどのインターネットが這い回っているようです。Stackoverflow、Firefox.com、reddit、およびgoogleの検索は低速です。私にとって最も重要なことは、私の本番ビジネスのWebサイトの実行速度が遅いか、まったくロードされていないことです。いいえ、接続だけでなく、3Gを搭載した携帯電話でもテストしました。GoogleAnalyticsのないサイトは正常に動作しているようです。

これが何が起こるかのスクリーンショットです

これはFirefoxウィンドウの左下隅にあります。そのように20秒以上そこに座ります。接続できない場合は、3秒後に消えてほしいです。

ここに画像の説明を入力してください

この回転する緑色の画像はFirefoxタブにあり、そこにあるだけで、ページが20秒以上読み込まれているように見えます。接続できない場合は、3秒後に消えてほしいです。

ここに画像の説明を入力してください

今ではGoogleAnalyticsではないかもしれません、私の国の国際ゲートウェイは遅いか何かで動いているかもしれません。しかし、証拠はそれがグーグルアナリティクスであるかもしれないことを強く示唆しています。これで、Google Analyticsでなくても、サービスが完全にダウンした場合に対抗するためのいくつかの方法に興味があります。したがって、仮に、Google Analyticsのデータセンターで大規模な火災が発生し、消火システムが故障したと仮定しましょう。現在、GoogleAnalyticsは数日間完全にオフラインになります。バックアップサーバーはありません。スタンバイデータセンターはありません。架空のシナリオは大丈夫です。私のサイトをGoogleAnalyticsサービスに依存させる余裕がないので、今でも私のサイトを実行する必要があります。ただし、サービスが実際にタイムリーに実行されている場合は、追加のボーナスとして分析機能を使用すると便利です。

さて、ここでいくつかのアイデアを投げています:

  1. スクリプトに追加できるタイムアウトがあり、Google Analyticsへの接続をキャンセルし、時間がかかりすぎる場合はリクエスト/ダウンロードを停止しますか?その後、2秒後にサイトの読み込みを続行します。
  2. または、さらに良いことに、サイトを完全にロードし、サイトのロードが完全に完了した後、Ajaxを使用してGoogle Analyticsにリクエストを送信することもできますか?なぜデフォルトでこれを行わないのですか?

</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がダウンしている間、私のWebサイトに継続性を与えるために、私が採用できるいくつかの方法は何ですか?潜在的なソフトウェアまたはハードウェアソリューションに興味があります。PHP / MySQL /HTML5Webサイトが実行されているLinuxVPSに完全にアクセスできると仮定します。

また、これに対する信頼できる答えは何ですか:一部の人々は、終了</head>タグの前にコードを配置すると言います。</body>他の人はそれを終了タグの前に置くと言います。どちらが最善の方法ですか?

どうもありがとう

ソリューションの更新

わかりました。Jaspalの助けを借りて何が機能するかを見つけました。解決策は以下のとおりです。

<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リクエストが開始され、実際にデータをGoogleAnalyticsに送信しているga.jsと__utm.gifがダウンロードされます。その最初の5秒後、基本的に前述のすべてのブラウザービジュアルが消え、ブラウザーユーザーのビジュアルをロードせずにGoogleAnalyticsリクエストがバックグラウンドでサイレントに発生します。次に、ホストファイルでGoogle Analyticsをブロックしようとしましたが、ブラウザのビジュアルが表示されません。完璧です。

$.ajaxtimeout: 5000リクエストのプロパティは何もしていないように見えることに注意してください。もともと私は、5秒間データを取得できなかった場合にリクエストを中止することを望んでいましたが、APIドキュメントに次のようなメモがあります

Firefox 3.0以降のみで、スクリプトとJSONPリクエストをタイムアウトでキャンセルすることはできません。スクリプトは、タイムアウト期間の後に到着した場合でも実行されます。

念のため、とにかくそこに置いておきます。私のテストから、Google Analyticsに到達できない場合(Firebug / Chromeのネット/ネットワークパネルを観察して)、Firefoxでは21〜23秒、Chromeでは16秒後にリクエストが中止されます。これはTCPタイムアウトである可能性があります。とにかくそれは静かにタイムアウトし、ブラウザにビジュアルをロードしていないのでユーザーは気付かないので、私はそれについて心配していません。

私は以下のジャスパルの答えを受け入れ、彼の解決策がこれを解決するために重要だったので、彼に賞金を授与しました。ただし、彼のソリューションには、ブラウザに表示される読み込みビジュアルがまだあります。したがって、setTimeout(彼の元のソリューションを少し変更したもの)を使用してここに投稿されたソリューションが進むべき道であり、100%動作することがテストされていると思います。

4

4 に答える 4

11

読み込まれる場所を考えると、Google アナリティクスへのリクエストの前に、サイトの残りの部分が読み込まれます。さらに、GA は非同期でロードされ、コードの実行を停止しないため、実際に問題が発生することはありません。

于 2013-01-19T10:19:47.700 に答える
7

Latest Approach :

  1. We allow ga to load normally.
  2. We store a reference to ga dom element in a global variable (gaClone).
  3. We set a timeout of 30seconds. We also set another global variable (loadedGoogleAnalytics) and set it to 0 initially. When ga loads, we set this variable to 1. On the timeout expiry, we check whether ga was loaded or not. If not, we delete the dom element 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>
    

[I have verified this approach with one of my actual GA accounts and i am able to see all the realtime tracking]

Previous Approach [Note: Ga does not execute if we try to place it in (document).ready();] [This solution does not work]

<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>

Hope this helps

于 2013-01-26T13:17:38.623 に答える
0

www.google-analytics.com/ga.js自分のサーバーでコピーをホストし、そこからロードすることができます。そのルートに行く場合は、定期的にga.jsをフェッチして最新バージョンを取得するようにcronジョブを設定します。

トラッキングコードの配置について:トラッキングコードをページの前(前</head>)に配置する主な理由の1つは、ページをすばやく離れる訪問者(おそらくページ全体がレンダリングされる前)に関係しています。その場合、トラッキングコードが実行されると、データを収集する可能性が高くなります。

于 2013-01-19T17:02:44.373 に答える
-1

壊れていないものを直そうとする

Google アナリティクスを使用する場合は、何らかの方法でサーバーと通信する必要があります。他の多くの回答で指摘されているように、サービスは非同期で実行されます。つまり、サイトの実行を妨げることはありません。「読み込み中のビジュアル」は、何かが読み込まれていることを示すためにあります...これについてできることはほとんどありません。

2 つのオプションがあります。Google アナリティクスに我慢するか、サーバー サイド スクリプトを使用してアナリティクスを実行します。

ウェブサイトがハングしている場合、それは別の理由によるものです。

編集

また、GA をすぐに含めないことも、統計の精度を低下させます。特に直帰率は正しくありません。

于 2013-01-24T15:33:22.400 に答える