javascript頁面渲染速度測試腳本分享
<html><script type="text/javascript">/*tag*/PAGE_SPEED_TIME = [new Date().getTime()];</script><head>
......
</head>
......
/* 頁面最末端,計算頁面加載耗用的時間 */
</body>
<script src="http://ossweb-img.qq.com/images/js/pagespeed/page_speed_v2.js"></script></html>
下面來分析一下page_speed_v2.js文件的內(nèi)容。對這個腳本進行重新格式化,以便更加方便閱讀。
/* 執(zhí)行匿名函數(shù)構(gòu)建對象PageSpeed */
;(function() {
PageSpeed = {};/* 這里沒有 var 關(guān)鍵字, 相當(dāng)于引用的是 window.PageSpeed */
/**
* 綁定createScript方法
*
* @param String a script標(biāo)簽的src屬性的值
* @param String b script標(biāo)簽的id屬性的值
*/
PageSpeed.createScript = function(a, b) {
var c = null;
if (document.getElementById(b)) { /* script標(biāo)簽已經(jīng)存在 */
c = document.getElementById(b)
} else { /* 不存在, 創(chuàng)建script標(biāo)簽 */
c = document.createElement('script');
var d = null;
if (document.getElementsByTagName) {
d = document.getElementsByTagName('head')[0] || document.documentElement;
} else {
d = document.documentElement;
}
d.insertBefore(c, d.firstChild); /* 調(diào)用insertBefore方法, 將新創(chuàng)建的script標(biāo)簽插入為第一個子元素 */
}
/* 這里的花括號起到代碼片段分組功能 */
{
c.setAttribute('type', 'text/html');
c.setAttribute('style', 'display:none;');
c.setAttribute('charset', 'gb2312');
c.setAttribute('id', b);
c.setAttribute('src', a);
}
return c; /* 返回創(chuàng)建成功的script標(biāo)簽元素 */
};
/**
* 綁定 submitDataForPageSpeed 方法
*
* @param Object a Map對象
*/
PageSpeed.submitDataForPageSpeed = function(a) {
var b = {
'name': '',
'rate': 0
};
b.name = a.name;
b.rate = a.rate;
/* a.PAGE_SPEED_TIME數(shù)組的最后一個元素減去第一個元素 */
b['1'] = a.PAGE_SPEED_TIME[a.PAGE_SPEED_TIME.length - 1] - a.PAGE_SPEED_TIME[0];
for (var i = 1; i < a.PAGE_SPEED_TIME.length - 1; i++) {
b[(i + 1) + ''] = a.PAGE_SPEED_TIME[i] - a.PAGE_SPEED_TIME[0]
}
/* 提交速度測試結(jié)果的目的腳本 */
var c = 'http://pagespeed-ied.qq.com/r.cgi';
/* 遍歷 b 數(shù)組的元素, 構(gòu)建 query string */
var d = [];
for (var p in b) {
d.push(p + '=' + b[p])
}
c += '?' + d.join('&');
/* 創(chuàng)建script標(biāo)簽提交測速結(jié)果 */
PageSpeed.createScript(c, 'submitForPageSpeed')
};
/**
* 綁定 defaultSubmit 方法
*
*/
PageSpeed.defaultSubmit = function() {
var a = '';
try {
a = location.host
} catch(e) {}
var b = {
'name': a,
'rate': 1,
'PAGE_SPEED_TIME': []
};
if (!b.name) {
return
}
if (! (typeof(PAGE_SPEED_TIME) == 'object' && PAGE_SPEED_TIME instanceof Array)) {
return
}
/* 獲取新的時間戳 */
PAGE_SPEED_TIME.push(new Date().getTime());
b.PAGE_SPEED_TIME = PAGE_SPEED_TIME;
/*
* 沒看懂這里為啥需要一個新的變量 aaa, 直接使用 a 不可以么?
* try ... catch 結(jié)構(gòu)中使用的卻是一個新的變量 aaaa 但后面卻從未使用, 為何? 是否應(yīng)該是 aaa?
*/
var aaa = '';
try {
aaaa = location.host
} catch(e) {}
var c = Math.floor(Math.random() * 10000);
if (aaa == "ktv.qq.com" || aaa == "ttd.qq.com" || aaa == "tian.qq.com" || aaa == "sura.qq.com" || aaa == "gw.tnt.qq.com" || aaa == "007.qq.com") {
c = Math.floor(Math.random() * 1000);
}
/* 隨機概率提交數(shù)據(jù) */
if (c <= b.rate * 1) {
PageSpeed.submitDataForPageSpeed(b);
}
};
/**
* 綁定submit方法(用于CDN測速?)
*
* @param String a 名稱
*/
PageSpeed.submit = function(a) {
var b = PageSpeed.cdn_page_speed_submitData;
var c = {};
for (var p in b) {
c[p] = b[p]
}
c.name = a || c.name;
PageSpeed.submitDataForPageSpeed(c);
}
})();
try {
/* 1秒后嘗試提交數(shù)據(jù) */
setTimeout(function() {
PageSpeed.defaultSubmit()
},
1000);
} catch(e) {}
/* 最后這段注釋, 第二段是32位16進制數(shù)字, 應(yīng)該是類似于 ETag 用于標(biāo)記內(nèi)容版本的 */
/* |xGv00|ca82276cd78ac911d3d4310ba1408236 */
相關(guān)文章
JavaScript Event學(xué)習(xí)第十一章 按鍵的檢測
檢測用戶的按鍵是事件處理程序的一個很特別的環(huán)節(jié)。這一章我們著力解決一些非常棘手的問題,并且制定一個完備的表格。2010-02-02
JS傳遞對象數(shù)組為參數(shù)給后端,后端獲取的實例代碼
下面小編就為大家?guī)硪黄狫S傳遞對象數(shù)組為參數(shù)給后端,后端獲取的實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06
微信公眾號中的JSSDK接入及invalid signature等常見錯誤問題分析(全面解析)
這篇文章主要介紹了微信公眾號中的JSSDK接入及invalid signature等常見錯誤問題分析(全面解析),需要的朋友可以參考下2020-04-04
微信小程序事件對象中e.target和e.currentTarget的區(qū)別詳解
這篇文章主要介紹了微信小程序事件對象中e.target和e.currentTarget的區(qū)別詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05

