效率让数据说话

    一直不是很喜欢用JS框架内的方法,一直持有能不用就不用的原则,于是类似于如document.getElementById的JS内置方法就用内置,或者自己简单封装一个,尽量避免使用开源框架内的大封装去取。

    理由很简单,从性能上讲,封装得越多调用执行的过程就越长,而我们只是简单的去执行某一句语句的时候,有没有必要一下全部取出来吗?

    前两天上级让我今后都改用Ext.get(id).dom去获取,虽然顺从执行,但心里终究不是很平衡,所以做了如下测试。

    用Ext框架的获取Dom的方法Ext.get(id).dom和内置的方法document.getElementById(id)各跑10000次做比较,各取5条数据。

    测试所用的代码如下:

<span id="getId">被获取对象getId</span>
    
<div style="width: 50%;border: #606066 1px solid; float: left">
        
<p><a href="javascript: getByExt()">Ext获取Dom</a></p>
        
<p>用时(毫秒):<span id="times1"></span></p>
    
</div>
    
<div style="width: 50%;border: #606066 1px solid; float:left">
        
<p><a href="javascript: getByJs()">原型获取Dom</a></p>
        
<p>用时(毫秒):<span id="times2"></span></p> 
    
</div>
<script type="text/javascript">
    
function getByExt()
    
{
        
var getDom;
        
var beginDate = new Date();
        
for (var i = 0; i < 10000; i ++)
        
{
            getDom 
= Ext.get("getId").dom;
        }

        
var endDate = new Date();
        document.getElementById(
"times1").innerHTML = endDate - beginDate;
    }

    
    
function getByJs()
    
{
        
var getDom;
        
var beginDate = new Date();
        
for (var i = 0; i < 10000; i ++)
        
{
            getDom 
= document.getElementById("getId");
        }

        
var endDate = new Date();
        document.getElementById(
"times2").innerHTML = endDate - beginDate;
    }

</script>

 

 Ext获取DOM执行时间 内置方法获取DOM执行时间
 250 140
 234 156
 250 157
 234 156
 250 156

    结果很明显,性能上内置的方法大大领先。

    原理也好理解,执行Ext.get(id).dom首先需要执行Ext.get(id),而Ext.get(id)获取的并不止dom一个,而就算获取dom时也是去执行document.getElementById(id)方法,效率上当然大大降低了。

    而获取DOM元素的方法是很常使用的。

    我的想法是,为了方便书写和管理用方法封装一个太长的内置方法是可行的,比如广泛使用的$(id)封装,虽然效率上同样有点影响,但影响不大,用上面的测试方法,用时大概在180左右。

    这种大容量封装在框架内并不少见。

    好吧,我承认,对框架一直有想法,框架固然很强大,但也正因为它太强大了。。。

 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值