Html5-boilerplate: 利甚可胜な堎合は、GoogleAnalyticsの远跡にlocalStorageを䜿甚したす

䜜成日 2013幎10月07日  Â·  30コメント  Â·  ゜ヌス: h5bp/html5-boilerplate

TL; DR

(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
e=o.createElement(i);r=o.getElementsByTagName(i)[0];
e.src='//www.google-analytics.com/analytics.js';
r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
ga('create','UA-XXXXX-X',{'storage': 'none','clientId':localStorage.getItem('gaClientId')});
ga(function(t){localStorage.setItem('gaClientId',t.get('clientId'));});
ga('send','pageview');

起源
http://stackoverflow.com/questions/4502128/convert-google-analytics-cookies-to-local-session-storage/19207035?noredirect=1#19207035

Googleアナリティクスドキュメント
https://developers.google.com/analytics/devguides/collection/analyticsjs/domains#disableCookies

Modernizer.localstorageを䜿甚しお、 localStorageのサポヌトを確認し、Cookieが利甚できない堎合はフォヌルバックするこずができたす。 䟝存関係ずしおModernizrをロックむンするかどうかはわかりたせんが。

どうしお
Googleは、ドメむンたたは、さらに蚀えば、ドメむンぞのすべおのリク゚ストに察しおCookieをサヌバヌに送信する必芁がないためです。

new feature

最も参考になるコメント

アップデヌト

localStorageを䜿甚しおClientIDを保存するこずはTOSに反したせん。 珟圚、Googleによっお正匏にサポヌトされおいたす https //developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#using_localstorage_to_store_the_client_id

泚:(非垞に叀いブラりザヌiOS5やFF4などをサポヌトする必芁がある堎合、それらのサンプルスニペットは倱敗する可胜性がありたすhttps://github.com/Modernizr/Modernizr/blob/master/feature-detects/storage/localstorageを参照。 js。

党おのコメント30件

䟝存関係ずしおModernizrをロックむンするかどうかはわかりたせんが。

たぶん、それをドキュメントに远加するのが最善でしょうか

たた、@ mathiasbynensにpingを実行したす。

切り取ったものを最適化しおくれおありがずう、David。 @alrraずしお、ドキュメントに远加するのは良いこずだず思いたす。

クレゞットは私のものではありたせん。 これは@elmerbulthuisによっお私の泚意を匕きたした。 私はこれを_snippet_自䜓の最適化ずは実際には考えおいたせんが、それ自䜓は--- Web党䜓の最適化です:-p。

誰もがlocalStorage゜リュヌションを採甚した堎合、グロヌバルに䜕バむト節玄できるのだろうか。

私は明らかにこの゜リュヌションの倧ファンです。 ボむラヌプレヌトにデフォルトで含めるこずの唯䞀の問題は、 @ davidmurdochが蚀及したものです。最初に、 localStorageの機胜テストを行う必芁がありたす。 これは、Modernizrを䜿甚するか、スタンドアロンコヌドの小さな郚分を远加するこずで実行できたすが、どちらの方法でもペヌゞサむズがわずかに倧きくなりたす。 たた、圱響を受けるドメむンのリ゜ヌスのリク゚ストヘッダヌでCookieが送信されないため、長期的には倚くのバむトが節玄されたす。

このようなもの

(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
e=o.createElement(i);r=o.getElementsByTagName(i)[0];
e.src='//www.google-analytics.com/analytics.js';
r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
(function(){var a=(function(){var c=new Date,b;try{
localStorage.setItem(c,c);b=localStorage.getItem(c)==c;
localStorage.removeItem(c);return b&&localStorage}catch(d){}}());
ga('create','UA-XXXXX-X',a?{storage:'none',clientId:a.gaId}:{});
ga(function(b){a.gaId=b.get('clientId')});ga('send','pageview')}());

http://mathiasbynens.be/notes/localstorage-patternから取埗したlocalStorage機胜テストを䜿甚したす。

いく぀かの簡単なテストの埌、正垞に動䜜しおいるようです。 これをより広範囲にテストした埌、PRを䜜成したす。 もちろん、歓迎したす

参考これにより、圱響を受けるドメむンぞのリク゚ストごずに、ラりンドトリップごずに玄33のrawバむトヘッダヌ/ Cookieは圧瞮されたせんを節玄できる可胜性がありたす。

@mathiasbynensの珟圚のむンラむン機胜怜出゜リュヌションは130圧瞮バむト*倧きくなっおいたす明らかに、これは䞀意のペヌゞごずに異なりたすが、倧たかなアむデアが埗られたす。 ですから、これをもう少しゎルフできるかどうかを確認する必芁がありたす。

個人的には、gzipで圧瞮された差分を65バむトたで芋たいので、すぐに自分で詊しおみたす。 :-)

_ ∗このデフレヌタヌの䜿甚 http //www.vervestudios.co/projects/compression-tests/snippet-deflator_

318 GZIPpedバむト珟圚のバヌゞョンは248 GZIPpedバむトです

(function(l,e){GoogleAnalyticsObject='ga',(window.ga||(ga=function(l,e){(ga.q=ga.q||[]).push(arguments)})).l=+new Date,l=document.createElement('script'),l.src='//www.google-analytics.com/analytics.js',(e=document.getElementsByTagName('script')[0]).parentNode.insertBefore(l,e);ga('create','UA-XXXXX-X',(function(l,e){try{l=(localStorage[ga.l]=ga.l)==ga.l;localStorage.removeItem(ga.l);return l}catch(l){}}())?{storage:'none',clientId:localStorage.clientId}:{});ga(function(l,e){localStorage.clientId=l.get('clientId')});ga('send','pageview')}())

これはあたりよくテストされおいないので、私はただそれをする必芁がありたす。 しかし、それは始たりです。

残念ながら、 setItemずgetItemの呌び出しを取り陀き、他のゎルフの「トリック」を䜿甚したため、 localStorageテストはおそらくどこかのブラりザで危険にさらされおいたす。

今のずころ、これですべおです。 :-)

スニペット自䜓をgzipしおいるこずに気づきたしたが、これはちょっず無意味です。 Gzipの結果は、ドキュメントの残りの郚分぀たり、ドキュメントにむンラむン化されおいる堎合はHTML゜ヌス、䞀郚の堎合はJavaScriptファむルの残りの郚分によっお異なりたす。 たぶん、スニペットだけのgzip圧瞮されたサむズを比范するこずは、これを枬定するための最良の方法ではありたせんか

スニペットは芋栄えがしたす。 新しいタむムスタンプを生成する代わりに、 ga.lタむムスタンプを再利甚するこずをお勧めしたす。

そしお残念ながら、私はsetItemずgetItemの呌び出しを取り陀き、他のゎルフの「トリック」を䜿甚したため、 localStorageテストはおそらくどこかのブラりザヌで危険にさらされおいたす。

もしそうなら、それはディヌルブレむカヌの私芋でしょう。

Firefox <9のサポヌトが問題ではなくなったずきに、 document.getElementsByTagName('script')[0]をdocument.scripts[0]に眮き換えるこずができたす。

@mathiasbynens GZIPpingを実行するず、圧瞮による_minimum_バむトの節玄が抂算されたす。 したがっお、それは完党に論点ではありたせん。 ほずんどの堎合、ペヌゞサむズが倧きくなるず、スニペットの圧瞮率が高くなりたす。

ただテストする必芁がありたす getItemずsetItemの呌び出しを远加し盎しお、309バむトたで枛らすこずができたした。

+function(l,e){(ct=this[GoogleAnalyticsObject='ct']||function(l,e){(ct.q=ct.q||[]).push(arguments)}).l=+new Date,l=document.createElement('script'),l.src='//www.google-analytics.com/analytics.js',(e=document.getElementsByTagName('script')[0]).parentNode.insertBefore(l,e);try{localStorage.setItem(ct.l,ct.l),l=localStorage.getItem(ct.l)-ct.l,localStorage.removeItem(ct.l)}catch(l){};ct('create','UA-XXXXX-X',l?{}:{clientId:localStorage.clientId,storage:'none'}),ct(function(l,e){localStorage.clientId=l.get('clientId')}),ct('send','pageview')}()
  • 珟圚、括匧を折り返す代わりに+蚘号を䜿甚するIIFEを䜿甚しおいたす。
  • clientIdは䞀郚のバむトを節玄するため、 localStorage.gaId localStorage.clientIdも䜿甚しおいたす。
  • window thisを䜿甚するず、さらに1バむト節玄できたす GoogleAnalyticsObject割り圓おの移動ず組み合わせお。
  • gaをct ctがより䞀般的に倉曎するず、さらに1バむト節玄されたしたこれはおそらく混乱する䟡倀はありたせん。
  • 関数呌び出しを取り陀き、 localStorageチェックにlを再利甚しお、成功したずきに0に割り圓おるず、倧量のバむトが節玄されたした。

繰り返したすが、これにはさらに倚くのテストが必芁です。

@davidmurdochテストに関する曎新はただありたすか 他の人がテストを手䌝うこずができるように、このためのテストフロヌを曞き留めるこずができたすか

申し蚳ありたせんが、私はMIAになりたした。優先床の高い、6か月のプロゞェクトに参加したしたが、他のこずに倚くの時間を割くこずができたせんでした。

これをテストする最も簡単なそしお最も愚かな方法は、分析コヌドをこの新しいコヌドに眮き換えお、数ずブラりザヌのバヌゞョンに奇劙な倉動がないかどうかを確認するこずです。 私はこれを自分で行いたしたが、目立぀ものは䜕も芋おいたせん。 しかし、ずにかくoldieの蚪問者はあたりいたせん。

別の方法は、生成されたiframeにこの実隓的な分析スクリプトをロヌドしお安定した分析スニペットに干枉しないように、もちろん別のGAアカりントでそこから_trackPageviewを呌び出すこずです。 次に、1週間ほど埌にデヌタを比范する必芁がありたす。

すぐにこれをテストするためのドロップむンスニペットに取り組むこずができるずは玄束できたせん。 私が隠れおいる間に他の誰かがこれらのアむデアの所有暩を取埗したい堎合は、すぐに行っおください。 :-)

http://drublic.github.io/css-modal/のテストを開始したした。 私は先月97kのペヌゞビュヌを獲埗したしたが、ブラりザ党䜓に乱暎に広がっおいたす。

数字

  1. Chrome 44.01
  2. Firefox 34.38
  3. Internet Explorer 8.86
  4. Opera 5.26
  5. Safari 4.01
  6. Androidブラりザ2.22

埅っお芋おみたしょう。 「通垞の」統蚈を䞊行しお実行したした。

それずは別に、コヌドは読みやすさのためにさらにいく぀かの曎新が必芁だず思いたす1行あたり80文字ず識別子を挿入する堎所。

箄1週間でこのテストに戻りたす。

私は少し早いですが、私の調査結果は珟時点ではかなり安定しおいたす。 残念ながら、䞡方のアカりントの蚪問者数に倧きな違いがありたす。

デフォルトの実装では、3月13日から17日の間に2,964回のナニヌク蚪問が衚瀺されたす。
ロヌカルストレヌゞベヌスでは、同じ時間枠で756回のナニヌク蚪問が衚瀺されたす。

3぀の理由が考えられたす。

  • 切り取られた私の実装が壊れおいたす
  • iframeの読み蟌みがブラりザによっおブロックされおいる
  • 切り取られたロヌカルストレヌゞ統合が壊れおいたす

珟圚、コヌドに間違いはありたせん http //drublic.github.io/css-modal/test-gau-localstorage.htmlこれはサむトに統合されおいるiframeです。

たた、ブラりザやペヌゞによっおiframeがブロックされたこずはありたせん。 これが起こるかもしれないかどうか誰かが考えおいたすか

これは、GUAが切り取ったロヌカルストレヌゞにバグがあるずいう解決策に぀ながりたす。 私は問題が䜕であるかを調べおいたせん。
さらなるテストのために最小化されおいないバリアントを開発し、実甚的な゜リュヌションができた埌に最小化できたすか

たた、これをHTML5BP v5.0からデスコヌプし、解決策が芋぀かった堎合は5.1でリリヌスするこずを遞択したす。 皆さんはどう思いたすか

たた、これをHTML5BP v5.0からデスコヌプし、5.1でリリヌスするこずを遞択したす

@drublic +1 v5.1.0マむルストヌンに問題を远加。

数字がそれだけ離れおいる堎合は、 ga('create', w / storage:'none'を呌び出すずきに、デフォルトのclientIdを指定する必芁があるずいう事実がありたす。

https://developers.google.com/analytics/devguides/collection/analyticsjs/domains#disableCookies

私のサむトでこの問題に぀いおブログに曞いたずころです LocalStorageを䜿甚したGoogle Async Analyticsず、ここでテストペヌゞを蚭定したすhttp//davidmurdoch.com/google-async-analytics-using-localstorage-test/ 。

読んで、共有しお、テストしおください。

泚これらのペヌゞでタむプミスや゚ラヌを芋぀けた堎合は、twitter @ pxcoachでお知らせください。

ねえ、パヌティヌに少し遅れおここに来おすみたせん。 私はGoogleAnalyticsチヌムで働いおおり、この問題に぀いおコメントし、考えを述べたいず思いたした。

たず第䞀に、H5BPプロゞェクトが、公匏に掚奚されおいるものずは機胜的に異なるGoogleAnalyticsトラッキングスニペットを掚奚するこずは良い考えではないず思いたす。 人々はおそらく圌らが同じであるず思い蟌むでしょう、そしお圌らが実際にそうでないならば、それは混乱を匕き起こすでしょう。 Google Analyticsのドキュメントで、GAが䞀郚の機胜をサポヌトしおいるず䞻匵しおいるが、誰かが別のスニペットを䜿甚しおいるためにサポヌトしおいない堎合は、デバッグがかなり困難になる可胜性がありたす特に、H5BPでスニペットが異なるこずが明らかにならない堎合。

GAがもっずうたくできるこずがあれば、コミュニティから分岐するのではなく、コミュニティのニヌズに合わせお進化したいず思っおいたす。 ずころで、GA関連のGithubの問題に぀いおは、遠慮なくpingたたはccしおください。

ずにかく、ここにlocalStorageの䞻な問題ず、GAがデフォルトのストレヌゞメカニズムずしおそれを提䟛しない理由がありたす。

localStorageのスコヌプはlocation.originですが、Cookieのスコヌプはトップレベルドメむンです。 Cookieストレヌゞを䜿甚するず、analytics.jsでサブドメむンの远跡をすぐに実行できたすが、これはlocalStorageでは䞍可胜です。 さらに、サむトの䞀郚がHTTPで、他の郚分がHTTPSの堎合、それも倱敗したす倱敗するず、ストレヌゞが共有されないため、クラむアントIDが倱われ、GAはそれを別のセッションずしお扱いたす。 。 これらはほずんどのGAナヌザヌにずっお問題ではないこずは事実ですが、今説明した機胜の喪倱のために、この提案されたスニペットをドロップむン眮換ずしお提䟛するのは悪いこずだず思いたす。

そうは蚀っおも、この問題ず@davidmurdochのブログ投皿に基づいお、公匏にサポヌトされおいるlocalStorageメカニズムの構築を優先するように努めたす。 珟圚、 storageパラメヌタはオプションcookieずnoneのみをサポヌトしおいたすが、3番目のlocalStorageオプションを远加したいので、サポヌトしおいないナヌザヌはサブドメむンたたはクロススキヌムトラッキングが必芁です。オプトむンできたす。これがい぀远加されるかはわかりたせんが、远加される堎合は曎新できたす。

これは誰にずっおも合理的だず思いたすか

@philipwaltonコメントありがずうございたす

これは誰にずっおも合理的だず思いたすか

Cc @ davidmurdoch 、 @ mathiasbynens

そうは蚀っおも、この問題ず@davidmurdochのブログ投皿に基づいお、公匏にサポヌトされおいるlocalStorageメカニズムの構築を優先するように努めたす。

+1

これが远加されたら、問題を曎新しおください。 ありがずう

@philipwalton 、+ 1すばらしいニュヌスです ただし、ビルドするために「詊す」必芁はありたせん。すでに行っおいたす。 :-p私は子䟛です、私は子䟛です。

先に進んでこのニュヌスでブログ投皿を曎新し、非公匏のlocalStorageトラッキングコヌドを䜿甚しおGitHubリポゞトリを䜜成し、その欠点を匷調したす。 ありがずう

+1しかし、将来のWebにはある皮のtopLevelStorageが必芁なようです。 オプションが利甚可胜になるこずをうれしく思いたす。 それを念頭に眮いお、スニペットが入ったずき、h5bpの奜みは䜕でしょうか

@ jonathantneal 、FirefoxにはglobalStorageがあり、クロススキヌム、ポヌト、およびサブドメむンストレヌゞを実行したした。 Firefoxはそれを実装した唯䞀のものであり、それ以来、廃止されたずマヌクされおいたす。 :-(

@davidmurdochこの号を開いお掘り䞋げおくれおありがずう、心から感謝したす

@philipwaltonディスカッションに参加しおいただき、ありがずうございたす。 @ mathiasbynensが蚀ったように、最新情報をお届けしたす。

非公匏のlocalStorageトラッキングコヌドを䜿甚しおGitHubリポゞトリを䜜成し、その欠点を匷調しおください。

@davidmurdochのリポゞトリはhttps://github.com/davidmurdoch/ga-localstorageですただ曎新されおいたせんが。

「localStorageを䜿甚したGoogleAnalytics」スクリプトをnpmに公開したした https //www.npmjs.org/package/ga-localstorage

https://github.com/davidmurdoch/ga-localstorageリポゞトリもコヌドで曎新されたした。

こんにちは、このSOコメントを読んだこずがありたすか

http://stackoverflow.com/questions/4502128/convert-google-analytics-cookies-to-local-session-storage/19207035#comment -44767913

皆さんのご意芋をお聞かせください。

@caesarsolそれは本圓に悪い考えだず思いたす。 コメントで説明したように、CookieずlocalStorageには同じ制限がないため、ペヌゞで実行されるすべおのスクリプトに察しおそれらを亀換するこずは非垞に危険です。

こんにちは@philipwalton 、応答をありがずう、しかし倚分私は䞍十分に説明したした、私はSOナヌザヌ_smhmic_によるこのコメントを参照しおいたした

これはGATOSに違反する可胜性がありたす。 GAチヌムメンバヌからの匕甚です。「HTTP状態管理メカニズムの䜿甚」読み取りlocalStorage「Cookieの状態を䌝播するこずは、プラむバシヌ保護の回避策です。これは、GoogleAnalyticsの利甚芏玄に違反したす。 "。 私の解釈では、GAはlocalStorageではなくCookieを䜿甚しおいたす。これは、Cookieの抂念ずCookieをクリアする方法に粟通しおいるナヌザヌが増えおいるためです。 したがっお、GAによるCookieの䜿甚はプラむバシヌ機胜です。 – smhmic

「HTTP状態管理メカニズムの䜿甚」読み取りlocalStorageを䜿甚しおCookieの状態を䌝播するこずは、プラむバシヌ保護の回避策です。これを行うず、Googleアナリティクスの利甚芏玄に違反したす。

うヌん、これは本圓ではないず思いたす。 GAが提䟛するオプトアりト機胜Chrome拡匵機胜などがあり、Cookieを䜿甚する実装者に䟝存したせん。 TOSのこのセクションのポむントは、公匏の「远跡しない」拡匵機胜を䜿甚しおいる人が远跡されるメカニズムを䜜成できないこずだず思いたす。

私はそれをさらに調べるこずができ、このスレッドを曎新したす。私の仮定は誀りであるこずが刀明したした。

アップデヌト

localStorageを䜿甚しおClientIDを保存するこずはTOSに反したせん。 珟圚、Googleによっお正匏にサポヌトされおいたす https //developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#using_localstorage_to_store_the_client_id

泚:(非垞に叀いブラりザヌiOS5やFF4などをサポヌトする必芁がある堎合、それらのサンプルスニペットは倱敗する可胜性がありたすhttps://github.com/Modernizr/Modernizr/blob/master/feature-detects/storage/localstorageを参照。 js。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡