javascript - try-catch 比 if-else 失败更快吗?

标签 javascript performance-testing

我的情况是,我有一个小型 JavaScript 程序,运行在格式化为二维数组的大量数据上。对于每个周期,它都会循环访问数据,在进行计算之前调用序列化器方法来序列化该记录。每个周期的数据都是相同的。所以现在我想将序列化的数据缓存到另一个数组中,这样从第二次开始就不必再次调用序列化器了。

这是我的功能:

  var cached=[];
  function getRow(x,y){
    if(!cached[x]){
      cached[x] = [];
    }
    if(!cached[x][y]){
      cached[x][y] = serializer(data,x,y);
    }
    return cached[x][y] ;
  }

到目前为止,它有效。但正如您所看到的,对于每一行,它必须在返回缓存数据之前检查 2 个条件,并且该条件仅在第一个周期中有用。所以我正在考虑使用 try-catch 而不是 if-else 来处理它。因此,在第一个周期中,try block 将始终失败,然后我将在 catch block 中填充缓存。然后在第一个周期之后,当所有数据都被缓存后,它就会直接获取值并返回。

但我担心的是:这样做会更快还是 try-catch 会同样减慢函数和性能?

最佳答案

try/catch 只有在不抛出错误的情况下才会更有效。而且,让我们明确一点,对于现代客户来说,效率的提高将是微乎其微的,并且在大多数应用程序中可能并不明显。

当抛出错误时,性能会受到影响,因为错误对象被实例化和配置,为该错误对象创建了一个存在于其中的范围,并且(当然)JS 运行时必须从错误中恢复。

根据我的经验,try/catch 通常一开始就被错误地使用。使用try/catch不应该是一个“选择”的问题,而应该是一个问题或者必要性。如果您的代码有可能导致错误,并且您有一种方法可以对其进行编码以避免该错误,那么就这样做 - 无需 try/catch

示例:

  • 应处理因错误的用户输入而可能发生的错误 通过重新思考用户界面以及输入的处理方式。
  • 由于与 Remote 的不良交互而可能发生的错误 源(认为AJAX)通常有错误和超时回调 选项。

如果您的代码有办法引发错误,并且超出了您的代码的控制范围(网络中断、服务器错误),try/catch 可能有必要。我说可能是因为现在许多API都有错误回调函数来处理这类事情。

简而言之,您永远不应该只选择 try/catchtry/catch 是一种在没有其他解决方案可用时使用的语言功能。

关于javascript - try-catch 比 if-else 失败更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49942562/

相关文章:

javascript - React 中的简单 for 循环需要标识符

sql - 有哪些工具可以测试SQL语句的性能?

Java 空检查性能

javascript - 如何衡量 Angular JS 应用程序的性能?

c# - 如何使我的网站免受 XSS 攻击。如何跟踪发出数千个假请求的IP?

javascript - 定位绝对 div 并在 div 外部切换

javascript - Vuejs 获取一个按钮,仅在 v-for 内打印一次

javascript - 只返回一个 json 对象给 ajax 调用者

javascript - 在 javascript 中,获取 FORM 名称的正确方法是什么?

ruby-on-rails - 如何在 Ruby 2.2 中获得对 Ruby Prof 特性的支持?