jQuery1.6性能评测
时间:2011-05-06 来源:元某人
上次做了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一如既往的优秀和性能稳定。
相关阅读 更多 +