复制代码 代码如下:
/* 获取渲染开始的时间戳, 保存在数组PAGE_SPEED_TIME中 */
<html><script type="text/javascript">/*tag*/PAGE_SPEED_TIME = [new Date().getTime()];</script><head>
......
</head>
复制代码 代码如下:
......
/* 页面最末端,计算页面加载耗用的时间 */
</body>
<script src="https://ossweb-img.qq.com/images/js/pagespeed/page_speed_v2.js"></script></html>
下面来分析一下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 < a.PAGE_SPEED_TIME.length - 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) {}