假设booleanMatrix [x] [y] [z]在10%的时间内为真。哪种替代方案更有效?
if (booleanMatrix[x][y][z]) booleanMatrix[x][y][z] = false; // alternative 1
booleanMatrix[x][y][z] = false; // alternative 2
这两个选项在我的程序[/ edit]的上下文中提供相同的功能[编辑]。备选方案1首先在可能的重写之前检查该值。备选方案2直接前进并写入。所以,我想这归结为访问变量值的成本是否小于编辑它的成本。是吗?
编辑:在我的程序的其他地方,未定义的booleanMatrix [x] [y] [z]被视为假的。这就是替代方案1在我的计划中不会产生不良后果的原因。
答案 0 :(得分:1)
那里有非常灵活的基准测试工具,非常适合这样的事情。具体来说,我会推荐jsperf。以下是我为此方案编写的测试:http://jsperf.com/read-or-write。
运行此测试后,结论是没有测试的编写通常是 MORE EFFICIENT 选项。
注意:我的部分测试结果与Renato(http://jsperf.com/testing-before-vs-just-writing)的测试结果相冲突。造成这种情况的原因可能与他使用不同比例的真实和谬误的测试有关。或者也许在我的测试使用三维数组时使用单维数组进行测试。
所以,你应该注意到这个结果不是很可靠。似乎还有许多其他因素实际上比您提出的具体问题更重要。这些结果可能与不同维度的数组有很大不同,数组的真假比例不同,浏览器不同等。
似乎最终,性能差异并不是特别显着。但是,您可以随时编写更适合您的方案的其他测试,以获得更明确的结果。
答案 1 :(得分:0)
之前没有经过测试的写作似乎更快:http://jsperf.com/testing-before-vs-just-writing
答案 2 :(得分:0)
备选方案2当然更有效,
在两个不同的操作中打破这两个替代品:
if (booleanMatrix[x][y][z])
和
booleanMatrix[x][y][z] = false;
第一种选择是操作1 +操作2,第二种选择是操作2,因此,替代2总是更快,问题是,它是否适用于您需要的东西?
答案 3 :(得分:0)
备选方案1总是需要稍微执行更多时间,因为它必须运行if()
的逻辑。 仅这些情况相同的情况是:
if()
声明没有时间进行评估。