欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2010年05月13日 16:58:52   作者:  
很多網(wǎng)站為了獲取用戶訪問網(wǎng)站的統(tǒng)計信息,使用了google-analytics或其他分析網(wǎng)站(下面的討論中只提google-analytics,簡稱ga)。
注冊ga后,ga就會生成一段js腳本,很多人直接把這段js復(fù)制到<body>的最后面就完事(包括 博客園、CSDN、BlogJava)??墒莋a自動生成的這段JS真的就是最合理的嗎?

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

目前ga的使用:
先看看ga自動生成的js腳本,如下: 
復(fù)制代碼 代碼如下:

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

看這段代碼,使用document.write來加載JS,注意了,這樣加載js是阻塞加載的,就是這個js沒加載完,后面的所有資源和JS都不能下載和執(zhí)行??赡苣銜X的這段代碼在body的最后面,后沒已經(jīng)沒內(nèi)容,沒什么會阻塞的了。
還有一些你忽略了,相信很多人在寫JS的時候需要在頁面加載完畢后執(zhí)行一些JS或AJAX,一般寫在window.onload 事件,或者寫入jquery的$(document).ready()方法中。這些JS就會被阻塞。如果我們的頁面上很多數(shù)據(jù)在window.onload中使用AJAX加載,而偏偏這個時候ga因為某些原因(和諧和諧)不能訪問,或者訪問很慢的時候。問題就來,我們自己的JS一直在等待ga的JS加載完,只有等ga的js加載超時后才會執(zhí)行我們的JS。

實例:
下面的代碼使用jquery在document.ready發(fā)送1個ajax請求(請求126.com)。測試前修改host文件,讓ga的js無法加載:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
復(fù)制代碼 代碼如下:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$.get("http://www.126.com/");
});
</script>
</head>
<body>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-123456-1");
pageTracker._trackPageview();
} catch(err) {}</script>
</body>
</html>

監(jiān)控圖:

上圖可以看出ga加載不了,在20秒超時后,才執(zhí)行我們的ajax請求,我們的ajax請求才花0.173s,但卻等了20s。
合理使用ga:

要合理使用ga,需要解決2個問題:
1. 如何非加載ga的js,
2. 如何在ga的ja加載完畢后立刻執(zhí)行 var pageTracker = _gat._getTracker("UA-123456-1");pageTracker._trackPageview(); 代碼。

非阻塞加載js的方法,主要有2種:
1. 動態(tài)創(chuàng)建<script標(biāo)簽
2.使用new Image().src="", 這種方法只會下載JS,而不會解析JS。所以用這個加載js后,里面的函數(shù)也不能調(diào)用(這種方法一般用于預(yù)加載)。

完善后的代碼:
復(fù)制代碼 代碼如下:

<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
var head = document.getElementsByTagName("head")[0] || document.documentElement;
var script = document.createElement("script");
script.src = gaJsHost + "google-analytics.com/ga.js";

var done = false; // 防止onload,onreadystatechange同時執(zhí)行
// 加載完畢后執(zhí)行,適應(yīng)所有瀏覽器
script.onload = script.onreadystatechange = function() {
if (!done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete")){
done = true;
try {
var pageTracker = _gat._getTracker("UA-123456-16");
pageTracker._trackPageview();
} catch(err) {}
script.onload = script.onreadystatechange = null;
}
};
head.insertBefore(script,head.firstChild);
</script>

上面代碼修改自jquery的ajax代碼。上面代碼很容易理解,動態(tài)創(chuàng)建script來加載js,通過onload,或 onreadystatechange 事件來加載完畢后執(zhí)行代碼。
 
 代碼修改完畢后再監(jiān)控測試如下;
 
 
 圖中看出ga照樣加載了20s,但我們的ajax請求并沒有等20s后才執(zhí)行,而是立刻執(zhí)行了。
jquery 加載ga:
    可能你覺的上面的代碼寫的比較多,比較繁瑣,如果你用jquery的話,可以簡化成下面這樣:
復(fù)制代碼 代碼如下:

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

有需要請查看:高性能WEB開發(fā)系列

[聲明] 轉(zhuǎn)載請注明出處:http://www.cnblogs.com/BearsTaR/。 禁止商用!

相關(guān)文章

  • JavaScript實現(xiàn)兩個數(shù)組的交集

    JavaScript實現(xiàn)兩個數(shù)組的交集

    這篇文章主要介紹了JavaScript實現(xiàn)兩個數(shù)組的交集,給定兩個數(shù)組???nums1???和??nums2??返回它們的交集,輸出結(jié)果中的每個元素一定是唯一的,下文詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-03-03
  • 教你使用javascript簡單寫一個頁面模板引擎

    教你使用javascript簡單寫一個頁面模板引擎

    不知道你有木有聽說過一個基于Javascript的Web頁面預(yù)處理器,叫做AbsurdJS。只是打算寫一個CSS的預(yù)處理器,后來擴(kuò)展到了CSS和HTML,可以用來把Javascript代碼轉(zhuǎn)成CSS和HTML代碼。當(dāng)然,由于可以生成HTML代碼,你也可以把它當(dāng)成一個模板引擎,用于在標(biāo)記語言中填充數(shù)據(jù)。
    2015-05-05
  • 小程序上傳文件至云存儲的實現(xiàn)

    小程序上傳文件至云存儲的實現(xiàn)

    在小程序云開發(fā)中,要實現(xiàn)上傳文件至云存儲,有兩種方案:云函數(shù)和HTTP?API,本文主要講講如何使用HTTP?API實現(xiàn)小程序外上傳文件至云存儲,感興趣的可以了解一下
    2022-01-01
  • layer設(shè)置maxWidth及maxHeight解決方案

    layer設(shè)置maxWidth及maxHeight解決方案

    這篇文章主要介紹了layer設(shè)置maxWidth及maxHeight解決方案,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-07-07
  • js實現(xiàn)百度聯(lián)盟中一款不錯的圖片切換效果完整實例

    js實現(xiàn)百度聯(lián)盟中一款不錯的圖片切換效果完整實例

    這篇文章主要介紹了js實現(xiàn)百度聯(lián)盟中一款不錯的圖片切換效果的方法,以完整實例形式分析了javascript操作圖片切換的技巧,需要的朋友可以參考下
    2015-03-03
  • js實現(xiàn)購物車加減和價格運(yùn)算

    js實現(xiàn)購物車加減和價格運(yùn)算

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)購物車加減和價格運(yùn)算,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • js和php如何獲取當(dāng)前url的內(nèi)容

    js和php如何獲取當(dāng)前url的內(nèi)容

    js和php獲取當(dāng)前url的內(nèi)容在某些特殊的情況下還是蠻實用的,下面有個不錯的示例,感興趣的朋友可以參考下,希望對大家有所幫助
    2013-09-09
  • js編寫簡易的計算器

    js編寫簡易的計算器

    這篇文章主要為大家詳細(xì)介紹了js編寫簡易的計算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • js導(dǎo)入導(dǎo)出excel(實例代碼)

    js導(dǎo)入導(dǎo)出excel(實例代碼)

    這篇文章主要是對js導(dǎo)入導(dǎo)出excel的實例代碼進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-11-11
  • 原生javascript實現(xiàn)隔行換色

    原生javascript實現(xiàn)隔行換色

    這篇文章主要介紹了原生javascript實現(xiàn)隔行換色,需要的朋友可以參考下
    2015-01-01

最新評論