执行此操作的最快方法是什么?左侧的parens中的变量返回布尔值,它们表示窗口大小范围。 (例如o1281
为屏幕1281及更高版本返回true
,o1025
为1025及更高版本返回true
等等。)
markup = // ternary triangle (the rows set the markup priority at each band)
( o1281 ) ? r1281 || r1025 || r961 || r641 || r481 || r320 || r0 || omarkup:
( o1025 ) ? r1025 || r961 || r641 || r481 || r320 || r0 || omarkup:
( o961 ) ? r961 || r641 || r481 || r320 || r0 || omarkup:
( o641 ) ? r641 || r481 || r320 || r0 || omarkup:
( o481 ) ? r481 || r320 || r0 || omarkup:
( o320 ) ? r320 || r0 || omarkup:
( o0 ) ? r0 || omarkup:
omarkup;
我想可能会根据中间(o641
)条件将其分为2个范围。
值得吗?
答案 0 :(得分:2)
好的,你正在做的是寻找第一个按降序排列的真值o值,一旦你找到一个你正在寻找第一个真正的r值,其名称为<=
这个o值。找不到,您希望返回值omarkup
。
因为您只有几个o值和r值,所以您的代码尽可能“有趣”,似乎可以使测试次数最少。
我无法看到开关或散列是如何帮助的,因为你看起来似乎是按降序搜索第一个真值......因此,我不明白为什么分裂也有助于提高性能。保持原样,或者,如果您更喜欢可读性(正如许多程序员所做的那样),请制作1281,1025等字段的对象。
此外,担心性能通常是在面对将要执行许多次的操作时所做的事情。这是这种情况吗?假设o和r值不变,这看起来像你只会执行一次。 (仅供参考。)
<强>附录强>
根据添加到上述问题的评论,它看起来像 喜欢多次执行的操作。在这种情况下,尽管现代编译器非常好,但在JavaScript级别进行自我优化可能还可以。从代码审查角度来看,最大的问题是1281,1025,961,941等值是手动布局的,并且是源代码的一部分,因此维护,例如在此处添加新的大小值,好吧,棘手且容易出错。也就是说,根据您所展示的内容,我认为可以肯定地说,如果编写的JavaScript是最好的,那么编写的JavaScript是最好的。您始终可以针对实际定义这些值的实现进行一次拍摄,然后对其进行分析以查看它是否“足够快”。例如,您可以定义一个数组,例如
var sizes = [1281,1025,961,641,481,320,0]
并循环,但是,这样的实现存在开销。
可能对您有所帮助的一个问题是仔细考虑可以缓存和不缓存的内容。这有助于加快将来执行此代码的速度。