捕获异常,而不是比较性能的数组值

Catching an exception instead of comparing array values for performance?

本文关键字:性能 数组 比较 捕获异常      更新时间:2023-09-26

我有一个函数,可以生成从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]))的内容更昂贵?

性能结果会因运行环境而异。因此,不同的浏览器、操作系统等都可能产生影响。

话虽如此,通常抛出异常是一件非常昂贵的事情(想想构建堆栈跟踪、生成对象等所涉及的所有工作)。因此,在大多数情况下,如果可以的话,你最好使用比较。

作为大多数语言(如果不是所有语言的话)的一般设计原则,例外应该只是规范的例外。您不应该使用它们来控制程序的正常流程,而是处理罕见的异常情况,通常涉及错误、失败或某种错误。