我的情况是,我有一个小型 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/catch
。 try/catch
是一种在没有其他解决方案可用时使用的语言功能。
关于javascript - try-catch 比 if-else 失败更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49942562/