在Internet Explorer 7中,此代码在47毫秒内始终如一地执行:
function updateObjectValues() {
$('.objects').html(12345678); // ~500 DIVs
}
Run Code Online (Sandbox Code Playgroud)
但是,此代码在157毫秒内始终如一地执行:
function updateObjectValues() {
$('.objects').html('12345678'); // ~500 DIVs
}
Run Code Online (Sandbox Code Playgroud)
传递数字比字符串快3倍.为什么这些结果如此显着不同?而且,有没有办法帮助字符串的性能?
如果你看一下jQuery的源代码(甚至unminified生产版本),你将看到if (typeof value === "string" ...的代码分支是显著比最终更复杂else,当你在一些传将发生版本.
这是1.4.4代码,如果值是一个字符串:
} else if ( typeof value === "string" && !rnocache.test( value ) &&
(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
value = value.replace(rxhtmlTag, "<$1></$2>");
try {
for ( var i = 0, l = this.length; i < l; i++ ) {
// Remove element nodes and prevent memory leaks
if ( this[i].nodeType === 1 ) {
jQuery.cleanData( this[i].getElementsByTagName("*") );
this[i].innerHTML = value;
}
}
// If using innerHTML throws an exception, use the fallback method
} catch(e) {
this.empty().append( value );
}
}
Run Code Online (Sandbox Code Playgroud)
以下是数字的作用:
} else {
this.empty().append( value );
}
Run Code Online (Sandbox Code Playgroud)
显然,所有这些额外的检查和函数调用的开销加起来.我的意思是,即使只是在if顶部的语句中,有三个正则表达式测试,一个地图查找,一个字符串被小写 - 这是在我们进入语句的主体之前(如果我们这样做,也许是检查返回false),它涉及进一步的正则表达式(作为参数化替换的一部分)和循环...
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |