当前位置: 代码迷 >> JavaScript >> 探讨一个有关问题,try catch影响多少效率
  详细解决方案

探讨一个有关问题,try catch影响多少效率

热度:355   发布时间:2012-12-30 10:43:15.0
探讨一个问题,try catch影响多少效率
如题,在执行大规模程序的时候会拖慢几个百分点,自己试了一下貌似并不大
希望能分析的透彻点
------解决方案--------------------
不知道影响有多大,反正肯定对效率有影响,并且不消,所以基本不用,
------解决方案--------------------

var now=new Date().getTime()
for(var i=0;i<10000;++i){
    try{
      [1,2,3,4].concat([5,6,7,8])
}catch(err){}
}
console.log(new Date().getTime()-now)

有时候加了try{}catch(err){} 比没加还更快了
------解决方案--------------------
可以控件的,尽量控制一下。比如 if ( obj!=undefined && obj !=null ) { ... }

一些实在不可控制的代码, 就不用这么麻烦了, 还是老老实实 try catch吧。

这个原则, 适用于所有的语言。

你的想法, 还是尽量不要 try catch 对吧?

打个比方,一个很简单的取用户信息的方法:
public User GetUserById(string uid)
即使你的语句写的再好, 也会有一些意想不到的错误的。

比如:
DB服务器突然断开了连接;
你在开发环境有某个字段,但生产环境发布时忘记加上这个字段了;
……

但是,从另外一个角度来讲, 上面的这些错误是极少发生的, 所以根本不需要这么在意这些小概率事件――如果你刻意在代码中把这些意外因素考虑进来, 一是正常情况时代码的执行效率反而下降(如上面,你得判断连接是否存在,DB中是否存在User表,User表是否存在你要取的所有字段……绝对让你头大)。二是意外情况你根本想不完,绝对会有你意料之外的情况出现,但出现的机会很少,根本都不会影响软件的正常使用效率。

所以总可能发生一些意外情况的地方, 直接 try catch 就好。
------解决方案--------------------
非自己代码直接控制的调用 并且没有错误机制会抛出异常的 不希望代码因为异常脱离自己控制的 应该用try/catch
你说的事件处理要加
------解决方案--------------------
支持wzs_xyz说的。
extjs并不是版本越高越快,虽然extjs4.0+使用了MVC模式,但是从推出以来最争议的就是速度奇慢,IE6绝对惨不忍睹。
try catch可以使用,但是不能滥用,只有在能预见到可能出错的地方才使用,满版代码都有try catch就说明你的代码质量不高。
------解决方案--------------------
使用不当对性能是有影响。
当try块发生错误时,程序流程自动转入catch块,并将异常对象推入作用域前端的一个可变对象中。在catch块中,函数的所有局部就是被放在第二个作用链对象中。如

try {
methodThatMightCauseAnError();
} catch (ex){
alert(ex.message); //scope chain is augmented here
}

如果作用得当,try-catch表达式是非常有用的语句,所以不完全避免。
如果你计划使用一个try-catch语句,请确保你了解可能发生的错误。
一个try-catch语句不应该作为javascript错误的解决方法。如果你知道一个错误经常发生,那说明应当修正代码本身的问题。
你可以通过精缩代码的办法最小化catch子句对性能的影响。一个很好的模式是将错误交给一个专用函数处理。如:

try {
methodThatMightCauseAnError();
} catch (ex){
handleError(ex); //delegate to handler method
}
handError函数是catch子句中进行的唯一代码。此函数以适应方法自由地处理错误,并接收错误产生的异常对象。由于只有一条语句,没局部变量访问,作用域临时改变不会影响代码的性能。

------解决方案--------------------
try...catch 只要不滥用,对效率影响不大。