捕获异常,而不是比较性能的数组值
Catching an exception instead of comparing array values for performance?
我有一个函数,可以生成从3x3矩阵中的一个位置到另一个位置的路径,这样我就可以在方向变化时平滑地设置图像过渡的动画。它返回一个数组,其中包含在CSS类中转换的定位参数,例如:["top left vert", "left slow", "left"]
。转换在我的动画逻辑中的后续setTimout()
调用中进行处理。
在移动周期结束时,有问题的元素返回到停止位置。这个转换不是由生成路径的函数处理的,而是抛出一个异常。在我的动画逻辑中,我有一个try/catch
块,如果抛出异常,我只需忽略它。通过这种方式,我知道我必须执行我的停止转换:
var move = moveClass.join(" ");
try {
move = updateDirection(move);
} catch(e) {}
if (move instanceof Array) {…} else {/* stop */}
函数可以返回数组中的相同位置,在那里我必须比较数组的元素(而不是使用instanceof Array
),而不是抛出异常。
我知道一个人不应该滥用这样的例外我的问题是:这是否比检查数组(例如if (move[0] == move[1] && move[0] == move[2])
)的内容更昂贵?
性能结果会因运行环境而异。因此,不同的浏览器、操作系统等都可能产生影响。
话虽如此,通常抛出异常是一件非常昂贵的事情(想想构建堆栈跟踪、生成对象等所涉及的所有工作)。因此,在大多数情况下,如果可以的话,你最好使用比较。
作为大多数语言(如果不是所有语言的话)的一般设计原则,例外应该只是规范的例外。您不应该使用它们来控制程序的正常流程,而是处理罕见的异常情况,通常涉及错误、失败或某种错误。
相关文章:
- JavaScript数组优化以提高性能
- javascript散列/数组混合性能
- 哪一个在访问数组长度方面的性能更好
- Javascript性能:如何在数组中循环并检查每个值比indexOf、search和match更快
- 捕获异常,而不是比较性能的数组值
- 在JavaScript性能方面模拟结构处理的C数组
- 面对非常糟糕的 angular.copy 用于大型数组的性能
- 在MongoDb中将数据存储为对象与数组以提高写入性能
- 诉诸数组中不存在的元素,会大大降低性能
- Javascript图像数据到多维数组性能问题
- Javascript 对象与数组性能
- 什么最适合性能:带键的数组或包含数组的键
- 使用动态生成的数据数组进行 ng 重复的性能
- 在循环中缓存数组查找是否有任何性能提升
- ClojureScript数组性能需要mod吗?或者它只是关于边界检查
- Javascript中嵌套for循环与数组函数的性能
- 处理大型数组时的JavaScript性能
- 即使使用较小的块,Javascript数组性能也会崩溃
- 使用Javascript通过ID查找元素的最佳性能.数组或对象
- 性能-数组.forEach vs .实现版本