[原创][开源]跨浏览器的JavaScript性能检测工具 - 至于你信不信,我反正信了
来源:互联网 发布:阿里云ecs安装tomcat 编辑:程序博客网 时间:2024/04/29 12:36
提出问题
如果识别出页面中JavaScript函数的性能问题,在不同浏览器下有不同的测试工具:
Firefox下使用Firebug的Profile工具
Chrome下使用内置的Profile工具
IE9下也有Profile工具
虽然大家的功能一个比一个炫,但是始终解决不了两个问题:
- 如何只检测指定命名空间下的函数性能,否则会产生大堆的无用数据。
- 不能跨浏览器使用,没有统一的参照物。同时不同工具之间还有一定差异的背景噪音影响。
还有一点就是仍然占据主流的IE7和IE8没有内置的JavaScript性能检测工具。
寻求解决方案
首先在网上找到的一篇文章是John Resig在2008年6月发表的一篇文章,是够古老的了,不过还是非常有借鉴意义,它的输入结果如下所示:
我们来看一下它的核心代码,这段代码用来处理jQuery.fn下的所有函数:
for (var method in jQuery.fn)(function (method) {
if (method == "init") return;
var old = jQuery.fn[method];
jQuery.fn[method] = function () {
if (!internal && curEvent) {
internal = true;
var m = curEvent.methods[curEvent.methods.length] = {
name: method,
inLength: this.length,
args: formatArgs(arguments)
};
var start = (new Date).getTime();
var ret = old.apply(this, arguments);
m.duration = (new Date).getTime() - start;
if (curEvent.event == "inline") curEvent.duration += m.duration;
if (ret && ret.jquery) m.outLength = ret.length;
internal = false;
return ret;
} else {
return old.apply(this, arguments);
}
};
})(method);
从这段代码中,我们看到如下一些步骤:
- 将需要处理的函数备份起来:var old = jQuery.fn[method];
- 使用一个新的函数覆盖此函数:jQuery.fn[method] = function () {
在新函数内,调用备份的原始函数,并在调用前后添加计时代码,以确定本次调用这个原始函数的时间:
var start = (new Date).getTime();var ret = old.apply(this, arguments);m.duration = (new Date).getTime() - start;
有了这个核心概念,我们可以写个自己的JavaScript的Profile功能,而不仅仅是局限于检测jQuery代码,我们要让用户自己指定要检测的JavaScript命名空间!
我的开源实现
我的开源实现:http://code.google.com/p/jprofile/
它的最大特点:
- 可以指定测试的命名空间
- 可以跨浏览器使用
使用起来非常方便,只需要如下几个步骤:
在页面的最后引入jprofile.js。(这也是安装jprofile开源解决方案的全部步骤!)
打开页面,可以看到右上角的那个Enable jProfile按钮:
点击那个按钮,会弹出一个对话框,输入你要检测的命名空间,比如"jQuery":
点击确定,页面会自动刷新,并显示jProfile工具条。点击Display按钮显示结果:
跨浏览器测试jQueryUI
下面就让我们使用jProfile测试一下jQueryUI首页JavaScript的性能,以下是测试数据。你可以自己试一下,在线示例地址。
Firefox
IE7
IE8
这是个跨浏览器JavaScript性能检测的奇迹,至于你信不信,我反正信了。
- [原创][开源]跨浏览器的JavaScript性能检测工具 - 至于你信不信,我反正信了
- [原创][开源]跨浏览器的JavaScript性能检测工具 - 至于你信不信,我反正信了
- 至于你信不信,反正我信了
- 至于你信不信(由你),我反正信了
- java学习线路,至于你信不信,反正我信了
- 2012人类将从“微博体”过渡到“微媒体”。至于你信不信,反正我信了
- 不管你信不信,反正我信了
- 不管你信不信,反正我信了
- 至于你信不信。。。
- 不管你信不信,反正我信了。是这样实现的……
- 不管你信不信,反正我信了。是这样实现的……
- 神奇的一秒变超人,你信不信,反正我信了!
- 信不信由你,反正我是信了!接龙啊。。。。。
- 不管你信不信,反正我是信了:放大乳房!
- 不管你们信不信,反正我信了
- 据说研读完这21个故事的人都成了富翁...信不信由你,反正我是姑且信了!
- 2011年度最佳代码“不管你们信不信,我反正信了”
- 2011年度最佳代码“不管你们信不信,我反正信了”
- ExtAspNet v2.3.5 发布了
- ExtAspNet 本地化战略调整
- [原创]使用 Google Chart 在线服务实现软件版本发布时间线图
- [翻译]OAuth入门指南 – 1.概述
- [翻译]OAuth入门指南 - 2. 协议工作流
- [原创][开源]跨浏览器的JavaScript性能检测工具 - 至于你信不信,我反正信了
- ExtAspNet更新计划
- [原创]ExtAspNet新春贺岁版 - 文件上传控件、复选框列表控件、完善布局管理、表格的行扩展列、完整的100多个中文示例、30多处BUG修正与功能增强、《ExtAspNet秘密花园》系列文章
- [原创]FineUI秘密花园(四) — 页面级别的配置
- [原创]FineUI秘密花园(五) — 按钮控件
- ExtAspNet v3.0.1
- ExtAspNet官方示例网站和官方论坛速度归来!
- 不仅开源,而且对企业应用完全免费!ExtAspNet弃用GPL v2,拥抱Apache License 2.0
- [原创]FineUI秘密花园(一) — 为什么选择FineUI?