ga.jsの理解メモ。わかる所からOutPutすることにします。アドバイスのある方は、指摘をお願いします。
ga.jsのオブジェクト
中にあるものを列挙する。
- $: windowsオブジェクトに入る。他のオブジェクトの名前空間?上の親になる
- $.Fb: 初期値が設定されているオブジェクト。
- $.Kb: $.getTracker(propety-id)を呼ぶと作られる。APIを提供する。trackePageviewとか、trackeEventとか、setCustomVarとか
- $.$: cookie情報をマネージする。中で、$.Gbを動かす
- $.Gb: $.$の元で、実際のcookieの読み出し、書き込み、を行う。
- $.Jb: データをサーバーに送るリクエスト部分を仕事にしている
- $.Hb: cookieへの処理$.$に命令する。setCustomVarとかもやることになる。
- $.m: utmz周りの管理。$.m.wは、campaignの値をプロパティに持つオブジェクト。
- $.n: ecommerce周りのデータの管理。$.n.Mbとかはデータ保持用?
- $.Eb: システムやブラウザ情報を取得するオブジェクト
- $.N: trackEvent関連の処理。customVarの値にも関連する(独自にデータを送らなくなったので)
これだけ。
pageTracker._trackPageview()の流れ
順にいくと、
- ga.jsがloadされて、実行される。
- windowオブジェクトに、_gat($オブジェクト)という参照ができる。
- _gatには、上に挙げたオブジェクトのconstructorと、_getTrackerという関数が、プロパティとして作られる。
- _gat._getTracker(property-id)で、APIが定義されている$.Kbが newされ、pageTracker変数を作り参照させる。
- pageTrackerのAPIのひとつ、_trackPageviewを実行させる。
で、で、5の_trackPageview。大きく見ると、二つの実行式がある。ちなみに、bはpageTrackerオブジェクト。
- b._initData()
- b.Kc;
で、で、で、1の b._initData()
これは、他の多くのAPIでも、最初に呼ばれるメソッド。以前はAPIのリストに入っていたけど、今は内部で働くメソッドとして扱われている。最初に説明したコンストラクターが、あちこちでnewされている。
b._initData()の流れ。
- b.A = new $.Eb(); b.A.bc();
- ここで、システム情報やブラウザ情報を取得している。
- b.d = b.fc();
- ドメインチェック。setDomainName(“none”)なら、1が入る。そうでなければ、ドメインハッシュ。
- b.i = new $.$(c)
- クッキーの値を管理するオブジェクトが入る。cは、$.Fbで作られる初期化オブジェクト。APIの設定をすれば、このcのプロパティに値を設定しとける。
- b.g = new $.N()
- setKeyやらValueやらのメソッドが定義される。
- n = new $.Hb(c, b.d, b.i, b.g)
- ここまでで、作ったプロパティの値と、c=(new $.Fb())の値を引数にして、
- $.Hb()で、実際にcookieへの読み書きを$.$に指示する。
- ちなみに、n.Mは、utm[abcxzv]がそれぞれ配列で入る。
- b.rc()
- 中で、k = new $.Jb(c)として、送信用のオブジェクトを作っておく。
- b.pc()
- ここで、セッション判定に関わる処理をする関数を呼ぶ。utma,utmb,utmcとかを見る。
- n.tc()
- 5で作ったnのメソッドを実行。utmvの処理など。cookieなどへの書き込みも。
- b.ga = b.Yb(b.Za)
- referral情報の取得
- b.Ra = (new $.m(b.d, g.ga, b.r, c)).cc(bi, b.F)
- utmzの処理をするオブジェクトを作る。キャンペーン管理の。ccではutmzの処理が行われる。
- 引数のb.iは、クッキー管理オブジェクトの$.$。b.Fは、新規セッションならtrue,じゃなければfalse。
- b.ab = new $.N()
- new $.N()は二回目の実行(二個目のオブジェクト)。これはtrackEvent用。
- p = s
- sはtrueなので、pをtrueにする。9-11はp==falseが条件。重複処理を避けるためか、initDataはあちこちで呼ばれるし。
- $.gb || b.sc()
- Gasoオーバレイ関連の処理 $.gbはb.scの実行でtrueになる。一度initDataが実行されれば、b.sc()は呼ばれない。
initDataはこんな感じ。
b.Kc(a)の中
trackPageviewのもう一つの実行式のb.Kc(a)。
引数のaは、trackPageview(a)のa。pagePathをでっち上げる時に指定する引数。
短いのでコードを出す。
b.Kc = function (a) {
if (b.J()) {
var d = "";
if (b.g != w && b.g.G()[y] > 0) d += "&utme=" + T(b.g.G());
d += b.ua(a);
k.H(d, b.s, b.d);
}
};
順に見てく。
- if(b.J())
- これは、b.J=function(){return b._visitCode() % 10000 < c.U * 100} b._visitCodeはutmaのなかの二番目を値(sessionユニーク値)を返す。c.Uはサンプルレート。デファルトで100。なので、通常100%でb.J()はtrue。
- if(b.g.G(),,,,,
- b.gは、$.Nオブジェクト。追えてない。utmeはtrackEventの値を送信するのに使われるものなので、その辺りに関係しそう。
- d+=b.ua(a);
- データ送信用文字列作成。b.Aやc( $.Fb初期化オブジェクト)、キャンペーンかどうかとか(utmcr(n))など。
- k.H(シス情報, アカ情報, 現在時刻)
- kは(new $.Jc()); initDataの処理の中で作られている。
- k.H()は送信処理。$.Jbオブジェクトの中で、<img>タグを作ってDomに埋め込む作業が行われている。
これで、b.kc(a)は、終わり。
trackPageviewの処理の流れ(b.initData(), b.Kc())は、以上。
表面をなぞっただけだし、目的のセッション判別や、キャンペーンの値の処理などまで、届かなかった。
次回に、その辺りを書く。
こちらもあわせてどうぞ