jQuery1.6性能评测
上次做了jQuery1.5.1 DOM相关的函数性能测试,有童鞋指出我的计算方法不太合理,这里换了计时方式。
承接上一篇日志,这次要做的是jQuery1.6与1.5.2的属性值相关性能测试,1.6版本重写了绝大部分属性值函数,效果如何,慢慢道来。
首先是这次的计时函数。如下所示:
$(function(){
var t1=new Date();
var t2=new Date();
var sum=0;
var $input=$("#test");
while(t2-t1<500){
for(var i=0;i<500;i++){
value=$input.val();
}
sum+=500;
t2=new Date();
}
alert((t2.getTime()-t1.getTime())/sum*1000);
});
上次是直接循环3000次,然后算时间,3000次在IE6里往往要超时,而且IE6把弹提示框并等你按确认的时间也算进去了。所以误差巨大。这次控制时间为500ms以内,然后统计循环的次数,为了减少Date()函数的花销,设计了这个二重循环。最后求的的时间是函数单次运行的平均时间,单位是微秒,就是毫秒的千分之一。
结果如图。

val函数性能的确有明显进步,其余属性函数基本没有进步,甚至不如1.5.2了。也许是1.6换代码只是为了计算更精确和修正BUG,用意不在性能。
不过width函数慢的有点离谱,在IE6下直接用原生的offsetWidth方法可以只用30微秒,源代码中发现jQuery调用each函数累加了width、margin、padding。好吧,这是css定义的方式。但是我还是没想通,为什么一个空div,一句css不写。原生和jQuery能跑出10倍的性能差。
最后,IE6一如既往的慢,Opera一如既往的优秀和性能稳定。
浙公网安备 33010602011771号