很小的一个函数执行时间调试器Timer
对于函数的执行性能(这里主要考虑执行时间,所耗内存暂不考虑),这里写了一个简单的类Timer,用于量化函数执行所耗时间。
整体思路很简单,就是new Date()的时间差值。我仅仅了做了一层简单的封装——
/**
* 执行时间调试器
*
* Timer类
*/
(function(win) { var Timer = function() {
return this;
}; Timer.log = function(content) {
if (typeof console == "undefined") { // IE6/7
if(win.navigator.userAgent.indexOf("MSIE")>0) {
alert(content);
}
} else {
console.log(content);
}
}; Timer.prototype = { // 开始执行时间
start: function() {
this.startTime = +new Date();
return this;
}, // 结束执行时间,并记录与开始执行时间的差值
stop: function(canLog) {
if (canLog && canLog === false) {
return this;
}
Timer.log(+new Date - this.startTime);
return this;
}, // 指定次数内,函数的执行时间
forFn: function(fn, times) {
var start, end;
start = +new Date;
if (times && typeof times === 'number') {
for (var i = 0; i < times; i++) {
fn();
}
} else {
fn();
}
end = +new Date;
Timer.log(end - start);
return this;
} }; win.Timer = Timer; })(window);
举两个调式的例子。
首先,测试一下是否使用事件委托绑定事件——
(function(doc, $) {
// 创建元素 - 10000个li
function createElement() {
var ulElement = doc.createElement('ul'),
liList = [],
i;
for (i = 0; i < 10000; i++) {
liList.push('<li>' + i + '</li>');
}
ulElement.innerHTML = liList.join('');
doc.body.appendChild(ulElement);
}
// 非委托事件绑定
function bind() {
$('ul li').bind('click', function() {
alert('bind')
});
}
// 委托事件绑定
function delegate() {
$('ul').delegate('li', 'click', function() {
alert('delegate');
});
}
createElement();
var timer = new Timer();
timer.forFn(bind);
timer.forFn(delegate);
})(document, jQuery);
数据就不罗列了,能够看出来,使用事件委托的方式,明显效率更快。
第二个子,列举一下jQuery选择器的效率性能测试——
// 对比ID选择器和类选择器
new Timer().forFn(function() {
$('#test');
}, 10000); // 13ms new Timer().forFn(function() {
$('.test')
}, 10000); // 65ms
如果,这里的test类的元素有两个以上,这里的执行时间会有所递增,但浮动不大。
再列举一下,在Classes前面是否使用Tags的执行时间——
new Timer().forFn(function() {
$('.test')
}, 10000);
new Timer().forFn(function() {
$('div.test')
}, 10000);
相对于chrome及firefox而言,后者的执行时间略短一些。而对于IE而言,前者的执行时间略短一些。
对于这里的start与stop方法,主要是用于函数内部的一段代码执行时间的测试,简单写个模板——
function tester() {
// 逻辑1 ...
var timer = new Timer().start();
// 逻辑2 ...
timer.stop(); // 便可得出逻辑2中代码的执行时间
// 逻辑3 ...
}
可用于测试任何可能影响性能相关的代码。
总之,这个很小的时间调试器有待日益完善,功能扩展点还需要各位博友多提供一些,大家一起思考,以更好的去调试js执行时间。
很小的一个函数执行时间调试器Timer的更多相关文章
- PHP很有用的一个函数ignore_user_abort ()
PHP很有用的一个函数ignore_user_abort () 2013-01-16 14:21:31| 分类: PHP | 标签:php 函数 |举报|字号 订阅 ignore_us ...
- xcode 调试器 LLDB
本文完全转载,转载地址:点击这里 你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函 ...
- 《python灰帽子》学习笔记:调试器设置
一.构造 C 数据类型 C Type | Python Type | ctypes Type ____________________________________________________ ...
- 与调试器共舞 - LLDB 的华尔兹
你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? 1 NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? 1 ...
- 用python开发调试器——起始篇
首先,你得准备一套python开发环境,正常情况下,一般是在windows下开发的,因为win系统应用广泛,再则就是要有个IDE,这里我选择我熟悉的Eclipse.环境搭建,网上都有,比如:http: ...
- Qt Creator在Windows上的调试器安装与配置
如果安装Qt时使用的是Visual Studio的预编译版,那么很有可能就会缺少调试器(Debugger),而使用MSVC的Qt对应的原生调试器是CDB(对应MinGW的Qt使用GDB调试器).本文介 ...
- Qt在Windows上的调试器CDB安装与配置
如果安装Qt时使用的是Visual Studio的预编译版,那么很有可能就会缺少调试器(Debugger),而使用MSVC的Qt对应的原生调试器是CDB(对应MinGW的Qt使用GDB调试器).本文介 ...
- Qt在Windows上的调试器安装与配置
如果安装Qt时使用的是Visual Studio的预编译版,那么很有可能就会缺少调试器(Debugger),而使用MSVC的Qt对应的原生调试器是CDB(对应MinGW的Qt使用GDB调试器).本文介 ...
- 【Qt开发】Qt Creator在Windows上的调试器安装与配置
Qt Creator在Windows上的调试器安装与配置 如果安装Qt时使用的是Visual Studio的预编译版,那么很有可能就会缺少调试器(Debugger),而使用MSVC的Qt对应的原生调试 ...
随机推荐
- MVC ASP.NET MVC5使用Area区域
MVC ASP.NET MVC5使用Area区域 一.为什么要使用area? 在大型的ASP.NET mvc5项目中一般都有许多个功能模块,这些功能模块可以用Area(中文翻译为区域)把它们分离开来 ...
- django admin的自定制
from django.contrib import admin # Register your models here. from .models import * from django.util ...
- 最大子段和问题(dp)
最大子段和问题 给出一个整数数组a(正负数都有),如何找出一个连续子数组(可以一个都不取,那么结果为0),使得其中的和最大? 例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4, ...
- 将整个文件读入string中
size_t GetFileSize(FILE* file) { fseek(file, , SEEK_END); return static_cast<size_t>(ftell(fil ...
- 求二叉树第K层的节点个数+求二叉树叶子节点的个数
size_t _FindLeafSize(Node* root) //求二叉树叶子节点的个数 { //static size_t count = 0; if ...
- 牛客网NOIP赛前集训营-提高组(第四场)B区间
牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1 \dots a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 ...
- SQL总结----存储过程
概念 存储过程(Stored Procedure):已预编译为一个可执行过程的一个或多个SQL语句. 创建存储过程语法 CREATE proc | procedure procedure_name [ ...
- python高级(一)—— python数据模型(特殊方法)
本文主要内容 collections.namedtuple __getitem__ 和 __len__ __repr__和__str__ __abs__.__add__和__mul__ __bool_ ...
- Pycharm快捷键配置
1.主题 毫无疑问Pycharm是一个具有强大快捷键系统的IDE,这就意味着你在Pycharm中的任何操作,例如打开一个文件.切换编辑区域等,都可以通过快捷键来实现.使用快捷键不仅能提高操作速度,看起 ...
- head first
1, insert 单引号时,使用/转义 2, 不要用NULL, 查找时使用isNull 来判断. 3, 用and / or 连接两个not 时,要写两个NOT 4,delete from tab ...