私は、かなり標準的なフローで動作する Google アナリティクス風のプラットフォームを構築しています。
- ユーザーは、固有のアカウント パラメーターを使用して JS スニペットを取得および構成します。
- 彼らはこの JS スニペットを Web サイトに埋め込み、私のメイン ライブラリを非同期的に読み込みます。
- ライブラリが読み込まれると、ユーザーはそのメソッドを呼び出して、データを Web アプリに送信できます。
さまざまな企業が上記のフローをどのように処理しているかについていくつかの異なる実装を調査した結果、Google の新しいユニバーサル アナリティクス タグが次の理由で最も洗練されているように見えることがわかりました。
メイン ライブラリがまだ非同期にロードされている間に、すべて 1 つの<script type="text/javascript">
タグ内でユーザーがメソッド呼び出しを行うことができるようです。
この例は、クイック スタート コードにあります。
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXX-Y', 'auto');
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->
ユーザーがどのように呼び出すことができるかを理解しようとしていますがga('create' ... )
、ga('send' ... )
メインの匿名関数がまだDOMを操作し、analytics.js
スクリプトを挿入/ダウンロードしている可能性があります。
上記のパターンがどのように機能するか知っている人はいますか?
ga
縮小されたコードをリバース エンジニアリングしようとする試みは、メイン ライブラリが読み込まれるまでメッセージのキューとして効果的に機能する空のオブジェクトを作成している可能性があることを示唆しているようです。次に、ライブラリが読み込まれると、キュー オブジェクトを解析し、必要な処理を行っているように見えます (ライブラリが読み込まれているため、実際にタスクを実行できるため)。
すべてのコードをリバース エンジニアリングするのは少し難しいため、上記が正しいかどうかは 100% 確信が持てません。
window.tempDataWhileLibraryHasntLoaded
ライブラリがロードされる前のように、オブジェクトを使用してメソッドによって呼び出されるすべてのデータを格納する同様の実装を作成しましたga("send" ...)
..ライブラリはこのオブジェクトを解析し、必要なものを処理し、オブジェクトをnullにしますが、これはそうではありませんGoogle の実装と同じくらいクリーンです。