成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

該如何加載Google-Analytics(或其他第三方)的JS

開發 前端
很多網站為了獲取用戶訪問網站的統計信息,使用了google-analytics或其他分析網站(下面的討論中只提google-analytics,簡稱ga)。注冊ga后,ga就會生成一段js腳本,很多人直接把這段js復制到的最后面就完事。可是ga自動生成的這段JS真的就是最合理的嗎?

哪怎么樣才算是合理,怎樣才是不合理了?因ga只是1個分析工具,它的使用絕對不能影響到我們的程序,如果影響了,則是不合理的。不影響則是合理的。

目前ga的使用:

先看看ga自動生成的js腳本,如下:

  1. <script type="text/javascript"> 
  2. var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");  
  3. document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' 
  4. type='text/javascript'%3E%3C/script%3E"));  
  5. </script> 
  6. <script type="text/javascript"> 
  7. try {  
  8. var pageTracker = _gat._getTracker("UA-123456-1");  
  9. pageTracker._trackPageview();  
  10. } catch(err) {}</script> 

看這段代碼,使用document.write來加載JS,注意了,這樣加載js是阻塞加載的,就是這個js沒加載完,后面的所有資源和JS都不能下載和執行。可能你會覺的這段代碼在body的最后面,后沒已經沒內容,沒什么會阻塞的了。

還有一些你忽略了,相信很多人在寫JS的時候需要在頁面加載完畢后執行一些JS或AJAX,一般寫在window.onload 事件,或者寫入jquery的$(document).ready()方法中。這些JS就會被阻塞。如果我們的頁面上很多數據在window.onload中使用AJAX加載,而偏偏這個時候ga因為某些原因(和諧和諧)不能訪問,或者訪問很慢的時候。問題就來,我們自己的JS一直在等待ga的JS加載完,只有等ga的js加載超時后才會執行我們的JS。

實例:

下面的代碼使用jquery在document.ready發送1個ajax請求(請求126.com)。測試前修改host文件,讓ga的js無法加載:

  1.  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  3. view sourceprint?  
  4. <html xmlns="http://www.w3.org/1999/xhtml">  
  5. <head>  
  6.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
  7.     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>  
  8.     <script type="text/javascript">  
  9.         $(document).ready(function(){  
  10.             $.get("http://www.126.com/");  
  11.         });  
  12.   </script>    
  13. </head>  
  14. <body>  
  15.     <script type="text/javascript">  
  16.         var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");  
  17.         document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' 
  18. type='text/javascript'%3E%3C/script%3E"));  
  19.         </script>  
  20.         <script type="text/javascript">  
  21.         try {  
  22.         var pageTracker = _gat._getTracker("UA-123456-1");  
  23.         pageTracker._trackPageview();  
  24.         } catch(err) {}</script>  
  25. </body>  
  26. </html>  
  27.      

監控圖:

該如何加載google-analytics(或其他第三方)的JS

上圖可以看出ga加載不了,在20秒超時后,才執行我們的ajax請求,我們的ajax請求才花0.173s,但卻等了20s。

合理使用ga:

要合理使用ga,需要解決2個問題:

1. 如何非加載ga的js,

2. 如何在ga的ja加載完畢后立刻執行 var pageTracker = _gat._getTracker("UA-123456-1");pageTracker._trackPageview(); 代碼。

非阻塞加載js的方法,主要有2種:

1. 動態創建

2.使用new Image().src="", 這種方法只會下載JS,而不會解析JS。所以用這個加載js后,里面的函數也不能調用(這種方法一般用于預加載)。

完善后的代碼:

  1.     <script type="text/javascript">   
  2.     var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");  
  3.     var head = document.getElementsByTagName("head")[0] || document.documentElement;  
  4.     var script = document.createElement("script");  
  5.     script.src = gaJsHost + "google-analytics.com/ga.js";  
  6.  
  7.     var done = false// 防止onload,onreadystatechange同時執行  
  8.     // 加載完畢后執行,適應所有瀏覽器  
  9.     script.onload = script.onreadystatechange = function() {  
  10.         if (!done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete")){  
  11.             done = true;  
  12.             try {  
  13.                 var pageTracker = _gat._getTracker("UA-123456-16");  
  14.                 pageTracker._trackPageview();  
  15.             } catch(err) {}  
  16.             script.onload = script.onreadystatechange = null;  
  17.         }  
  18.     };   
  19.     head.insertBefore(script,head.firstChild);  
  20. </script> 

上面代碼修改自jquery的ajax代碼。上面代碼很容易理解,動態創建script來加載js,通過onload,或 onreadystatechange 事件來加載完畢后執行代碼。

代碼修改完畢后再監控測試如下;

該如何加載google-analytics(或其他第三方)的JS

圖中看出ga照樣加載了20s,但我們的ajax請求并沒有等20s后才執行,而是立刻執行了。

jquery 加載ga:

可能你覺的上面的代碼寫的比較多,比較繁瑣,如果你用jquery的話,可以簡化成下面這樣:
 

  1.  var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");  
  2. $.getScript(gaJsHost + "google-analytics.com/ga.js",function(){  
  3. try {  
  4. var pageTracker = _gat._getTracker("UA-123456-16");  
  5. pageTracker._trackPageview();  
  6. catch(err) {}  
  7. }); 

系列專題:http://developer.51cto.com/art/201104/257581.htm

【編輯推薦】

  1. Web設計師應向肖像畫家學習的11個經驗
  2. 20個新鮮的Web應用 Web設計師不可錯過
  3. Ajax和WEB服務數據格式:自定義返回格式
  4. Ajax和WEB服務數據格式:JSON JSONP
  5. Ajax和Web服務數據格式:XML SOAP HTML
責任編輯:陳貽新 來源: BearRui的博客
相關推薦

2015-11-05 16:44:37

第三方登陸android源碼

2014-07-25 09:33:22

2010-11-12 10:57:37

JavaAndroidGoogle

2014-02-10 10:22:33

微信開發者

2018-12-04 10:24:23

VueReactJQuery

2017-12-11 15:53:56

2019-07-30 11:35:54

AndroidRetrofit

2014-07-23 08:55:42

iOSFMDB

2021-01-27 10:04:46

鴻蒙HarmonyOS動畫

2024-01-05 17:29:32

2021-04-27 15:30:54

鴻蒙HarmonyOS應用

2011-05-03 10:35:46

2022-05-21 23:56:16

Python庫搜索Python

2017-05-16 13:24:02

LinuxCentOS第三方倉庫

2023-07-26 08:21:33

2019-09-03 18:31:19

第三方支付電商支付行業

2016-10-21 14:09:10

2009-12-31 14:38:34

Silverlight

2017-11-01 06:40:33

2013-04-08 09:28:05

Chrome OS第三方云存儲
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品一区二区三区免费毛片 | 亚洲va国产日韩欧美精品色婷婷 | 免费高潮视频95在线观看网站 | 在线播放国产一区二区三区 | 午夜精品久久久久久久99黑人 | 在线观看www视频 | 国产成人在线一区二区 | 日韩有码一区 | 亚洲精品在线免费观看视频 | 国产精品成人在线播放 | 日韩av在线中文字幕 | 中文字幕国产精品 | 欧美毛片免费观看 | 日韩欧美大片 | 国产美女一区二区 | www.日本国产| www视频在线观看 | 国内自拍视频在线观看 | 久久国产精品视频免费看 | 中文字幕视频在线 | 99精品一区二区三区 | 人人干人人干人人干 | 91精品久久久久久久久久入口 | 精品久久久久久久久久久 | 91在线第一页 | 国产天堂 | 在线观看免费福利 | 日韩高清中文字幕 | 怡红院怡春院一级毛片 | 久久久久国产精品一区二区 | 欧美精品福利视频 | 免费高潮视频95在线观看网站 | 亚洲精品免费观看 | 亚洲视频一区二区三区 | 四虎影音 | 国产精品视频一区二区三区 | 亚洲精品一区二区三区在线 | 久久久久久免费毛片精品 | av中文字幕在线观看 | 久久精品av| 中文字幕国产高清 |