复制代码 代码如下:
/* 获取渲染开始的时间戳, 保存在数组page_speed_time中 */
......
复制代码 代码如下:
......
/* 页面最末端,计算页面加载耗用的时间 */
下面来分析一下page_speed_v2.js文件的内容。对这个脚本进行重新格式化,以便更加方便阅读。
复制代码 代码如下:
/* 执行匿名函数构建对象pagespeed */
;(function() {
pagespeed = {};/* 这里没有 var 关键字, 相当于引用的是 window.pagespeed */ /**
* 绑定createscript方法
*
* @param string a script标签的src属性的值
* @param string b script标签的id属性的值
*/
pagespeed.createscript = function(a, b) {
var c = null;
if (document.getelementbyid(b)) { /* script标签已经存在 */
c = document.getelementbyid(b)
} else { /* 不存在, 创建script标签 */
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); /* 调用insertbefore方法, 将新创建的script标签插入为第一个子元素 */
}
/* 这里的花括号起到代码片段分组功能 */
{
c.setattribute('type', 'text/html');
c.setattribute('style', 'display:none;');
c.setattribute('charset', 'gb2312');
c.setattribute('id', b);
c.setattribute('src', a);
}
return c; /* 返回创建成功的script标签元素 */
};
/**
* 绑定 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数组的最后一个元素减去第一个元素 */
b['1'] = a.page_speed_time[a.page_speed_time.length - 1] - a.page_speed_time[0];
for (var i = 1; i b[(i + 1) + ''] = a.page_speed_time[i] - a.page_speed_time[0]
}
/* 提交速度测试结果的目的脚本 */
var c = 'http://pagespeed-ied.qq.com/r.cgi';
/* 遍历 b 数组的元素, 构建 query string */
var d = [];
for (var p in b) {
d.push(p + '=' + b[p])
}
c += '?' + d.join('&');
/* 创建script标签提交测速结果 */
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 结构中使用的却是一个新的变量 aaaa 但后面却从未使用, 为何? 是否应该是 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);
}
/* 随机概率提交数据 */
if (c 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秒后尝试提交数据 */
settimeout(function() {
pagespeed.defaultsubmit()
},
1000);
} catch(e) {}
/* 最后这段注释, 第二段是32位16进制数字, 应该是类似于 etag 用于标记内容版本的 */
/* |xgv00|ca82276cd78ac911d3d4310ba1408236 */