2

Google の非同期分析トラッキング コードは次のとおりです。

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-Y']);
  _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>


私に言わせれば、それはかなり醜いです。これは次のように要約できます (クレジット: Mathias ):

<script>
  var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
  (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
  g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
  s.parentNode.insertBefore(g,s)}(document,'script'));
</script>


asyncしかし、HTML5属性とプロトコル相対 URL だけを使用できないのはなぜでしょうか?

<script src="//www.google-analytics.com/ga.js" async></script>
<script>var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];</script>

プロトコル相対 URL を使用すると、 をチェックする必要がなくなりますlocation.protocol。また、属性は、最新のブラウザasyncで目立たない読み込みを処理する必要があり、他のブラウザでは適切に劣化します。

これは良くないですか?

4

3 に答える 3

4

あなたはこれを行うことができます:

<script src="//www.google-analytics.com/ga.js" async></script>
<script>var _gaq= _gaq || [];
_gaq.push(['_setAccount','UA-XXXXX-X'],['_trackPageview']);
</script>

_gaqそれより短いと、ga.jsロードするもの、特に_gaq.pushGA が上書きする関数を上書きするリスクがあります。

script[async]DOM インジェクション メソッドを使用するのではなく、ハードコーディングの問題はscript[async]、インジェクションを非同期にする唯一のメカニズムではないことです。古いブラウザーでは、JS ベースの注入により、サポートがなくても非同期注入が発生する可能性がありますscript[async]

ただし、上記のコードはすべてのブラウザーで機能するはずですがga.js、古いブラウザーではブロックされます。節約された余分なバイトは、パフォーマンス ヒットに値するものではありませんが、これを行う場合は、スクリプトをフッターに配置する必要があります。

(注: https://www.google-analytics.com/ga.jsが動作するように Google によってセットアップされているため、ここではプロトコルの相対 URL が動作します。)

于 2012-05-09T21:04:31.697 に答える
1

非同期タグは、最新の準拠ブラウザーには十分ですが、古い非準拠ブラウザーには効果がないことに注意してください。確かに、それらは優雅に劣化します。しかし、それらはまったく非同期ではなく、単に async 属性を無視することによって劣化します。一方、動的挿入を使用すると、準拠していないブラウザーが非同期のように動作します。

もう 1 つの重要な点は、_gaq オブジェクトを再定義しただけでは、ga.js ファイルが以前に読み込まれている場合に問題が発生する可能性があることです。ほとんどの場合は発生しないはずですが、さまざまな理由で、または単に誤ってタグを複数回含めるサイトがあります。そのため、_gaq = _gaq || []ロジックを維持することをお勧めします。

Google アナリティクスの目標はきれいにすることではなく、適切に機能を低下させるという意味だけでなく、可能な限りすべてのブラウザーでまったく同じように機能するという意味でも、クロス ブラウザーになることです。各ブラウザーでわずかに異なる方法で動作する場合、1 つのブラウザーのメトリックを歪める可能性があり、これは望ましくありません。データ分析の最初の黄金律は、データの一貫性です。Mac 用に ie5.5 をサポートする必要があることを意味する場合でも。

于 2012-05-10T04:03:43.897 に答える
0

非同期が無視されていると仮定すると、古いブラウザではこれが壊れていることがわかります。

スクリプトをインラインにすることで、非非同期ブラウザがスクリプトをダウンロードしてすぐに実行するようになります。この時点で、これまで配列であった _gaq を解析し、格納されたコマンドを実行します。次に、push メソッドを書き換え、次にそれをリクエストを実行するための関数として使用します (例: _trackEvent)。

したがって、スクリプトを同期的に取得し、_gaq を配列として定義すると、Google が _gaq に加えた変更が上書きされ、ページビューが追跡されなくなります。

于 2012-05-09T19:30:17.753 に答える