javascript页面渲染速度测试脚本分享


Posted in Javascript onApril 15, 2014
/* 获取渲染开始的时间戳, 保存在数组PAGE_SPEED_TIME中 */
<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文件的内容。对这个脚本进行重新格式化,以便更加方便阅读。

/* 执行匿名函数构建对象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) {}
        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 <= 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秒后尝试提交数据 */
    setTimeout(function() {
        PageSpeed.defaultSubmit()
    },
    1000);
} catch(e) {}
/* 最后这段注释, 第二段是32位16进制数字, 应该是类似于 ETag 用于标记内容版本的 */
/*  |xGv00|ca82276cd78ac911d3d4310ba1408236 */
Javascript 相关文章推荐
百度 popup.js 完美修正版非常的不错 脚本之家推荐
Apr 17 Javascript
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
Nov 04 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
Jan 23 Javascript
jQuery 生成svg矢量二维码
Aug 09 Javascript
常用jQuery选择器汇总
Feb 02 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
Sep 02 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
Sep 27 Javascript
使用JS获取页面上的所有标签
Oct 18 Javascript
JavaScript对JSON数组简单排序操作示例
Jan 31 Javascript
深入剖析JavaScript instanceof 运算符
Jun 14 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
Nov 23 Javascript
vue实现虚拟列表功能的代码
Jul 28 Javascript
JS实现静止元素自动移动示例
Apr 14 #Javascript
js 获取元素下面所有li的两种方法
Apr 14 #Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
Apr 14 #Javascript
jquery使用jxl插件导出excel示例
Apr 14 #Javascript
js 获取input点选按钮的值的方法
Apr 14 #Javascript
js生成动态表格并为每个单元格添加单击事件的方法
Apr 14 #Javascript
Js实现动态添加删除Table行示例
Apr 14 #Javascript
You might like
php 网页游戏开发入门教程一(webgame+design)
2009/10/26 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
深入理解PHP内核(一)
2015/11/10 PHP
用php+ajax新建流程(请假、进货、出货等)
2017/06/11 PHP
IE FF OPERA都可用的弹出层实现代码
2009/09/29 Javascript
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
javascript学习笔记(二) js一些基本概念
2012/06/18 Javascript
两个数组去重的JS代码
2013/12/04 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
学习javascript面向对象 理解javascript原型和原型链
2016/01/04 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
关于layui导航栏不展示下拉列表的解决方法
2019/09/25 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
Python创建文件和追加文件内容实例
2014/10/21 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
Python实现的简单计算器功能详解
2018/08/25 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
Python使用python-docx读写word文档
2019/08/26 Python
python模拟实现斗地主发牌
2020/01/07 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
python字典按照value排序方法
2020/12/28 Python
简述安装Slackware Linux系统的过程
2012/05/08 面试题
实体的生命周期
2013/08/31 面试题
小学生学雷锋演讲稿
2014/04/25 职场文书
会议欢迎标语
2014/06/30 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
公民授权委托书
2014/10/15 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
给校长的建议书范文
2015/09/14 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
详解pytorch创建tensor函数
2022/03/22 Python