eval执行效率测试 ——直接调用方法传递参数和通过eval方法调用并传递参数 耗时比较

今天看JS性能优化中提及不要滥用eval方法,会运行时再次调用解释引擎对内容进行运行。因此想测试下,究竟eval的效率如何

测试中通过直接调用方法传递参数和通过eval方法调用并传递参数,比较不使用eval时和使用eval方式时的差异。

测试代码如下:

[c-sharp]  view plain copy
  1. <html>  
  2. <body>  
  3. <input type=button value="直接调用" οnclick="execFun(fun1)">  
  4. <input type=button value="eval" οnclick="execFun(fun2)">  
  5. </body>  
  6. <mce:script type="text/javascript"><!--  
  7. // 测试执行次数  
  8. var times = 500000;  
  9. /** 
  10.  * 测试方法 
  11.  */  
  12. function testFun(parm) {  
  13. }  
  14. /** 
  15.  * 执行方法 
  16.  */  
  17. function execFun(fun) {  
  18.     var t1 = new Date();  
  19.     for (var i = 0; i < times; i++) {  
  20.         fun();  
  21.     }  
  22.     var t2 = new Date();  
  23.     alert(t2.getTime() - t1.getTime());  
  24. }  
  25. /** 
  26.  * 测试方法1,和测试方法2长度相同 
  27.  */  
  28. function fun1() {  
  29.     testFun("aaaaaaaaaaaaaaaaaa");  
  30. }  
  31. /** 
  32.  * 测试方法2 
  33.  */  
  34. function fun2() {  
  35.     eval('testFun("aaaaaaaaaa")');  
  36. }  
  37. // --></mce:script>  
  38. </html>  

测试结果:

    IE8:

        直接调用:440ms              eval:5000ms

    FireFox3.6:

        直接调用:2ms                  eval:738ms

    Chrome5:

        直接调用:6ms                  eval:234ms

仅对IE8、FireFox3.6、Chrome5三种主流浏览器测试,如果需要了解其他浏览器情况,请自行测试。

结论:

      本文不关心不同浏览器执行效率,仅对比同种浏览器eval方法执行效率,从IE8中的测试结果可以看出,二者相差10倍,如果小范围应用尚可接受;从FireFox3.6中的测试结果可以看出,二者相差几百倍,通常情况下不要用eval方法,Chrome5测试结果处于IE和FireFox之间,二者相差数十倍;

      eval方法效率还是比较低的,能不用则尽量不用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值