【发布时间】:2013-12-13 09:01:50
【问题描述】:
我有一个函数可以生成从 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]))?
【问题讨论】:
-
“这比检查数组的内容更昂贵吗” --- 你写这个问题的时间比在 jsperf.com 上设置测试花费的时间还要多 PS:通常例外是昂贵的
-
几乎可以肯定。现代 JavaScript 实现可以很好地优化比较。我不知道有任何优化异常的实现。仅仅在异常对象中构建堆栈跟踪可能值得几十万次比较。
-
为什么不简单地返回
null,一个空字符串等?那只需要一个比较…… -
@Bergi 因为该函数必须在某些部分重写,因为稍后将数组转换为相应的类。
-
@nietonfir:你能不能展示一下整个函数代码?
标签: javascript performance exception-handling