什么更有效?检查==或只是改变变量?

时间:2010-06-14 16:55:56

标签: javascript actionscript performance memory-efficient

想象一下,我有一个名为X的变量。 让我们说每5秒我想让X =真。 (在这5秒钟之间可能是真或假,但是当5秒钟时,它会重置为真。)

检查值是否已经是真的更有效,如果没有,重新分配为true?或者只是X =真?

换句话说,哪个会运行得更快?

if(x==false){
    x = true;
}

VS

x = true;

一方面,如果不需要,第一个程序不会改变变量。另一方面,第二个程序不需要检查X等于什么;它直接潜入。

4 个答案:

答案 0 :(得分:8)

  • 几乎总是无所谓。编写最容易理解和维护的代码。只在必要时进行优化。
  • 最好的方法是测试它。描述您的代码。
  • 哪个更快可能取决于浏览器。
  • 哪个更快取决于变量通常是真还是假。
  • 话虽如此,我猜在大多数情况下设置变量而不进行测试会更快。

答案 1 :(得分:4)

真的取决于你的数据:)

如果x == false 90%的时间,那么对x的直接赋值会更快。

这是您可能不想担心效率的地方之一,如果您真的这样做,请对其进行分析..

答案 2 :(得分:2)

声明/警告:

这是微优化,绝不会以用户可衡量的方式影响程序的效率。如果你关闭所有的编译器优化,并运行一个优秀的分析器,你可以量化效果 - 但没有用户会注意到。

对于您的情况尤其如此,其中相关代码仅每隔几秒运行一次。花在分析上的时间可能会更好地用于改进应用程序的其他部分。

此外,在这些情况下,可读性应始终优先于非瓶颈微优化(尽管我的答案仅考虑运行时效率,如所要求的)。因此,我建议您在这种情况下使用的代码是x=true,因为它是最容易阅读和理解的。

最后,如果添加检查会提高速度,编译器可能已经知道并且会为你做,所以你不能错过x=true(这就是你应该在运行之前关闭优化的原因探查)。


答案:

唯一真正解决这个问题的方法是分析。您可能会发现0测试(x == false)基本上没有时间,因此值得包括,因为当x结果为真时它会保存。或者您可能会发现测试需要足够长的时间,以至于当x结果为假时会浪费太多时间。

我的猜测是测试是不必要的。这是因为0测试和其他按位操作(和,或等)都是如此之快,以至于我通常将它们视为花费相同的基本时间量。如果0测试花费的时间与OR操作相同(设置为true),则0测试会浪费时间。分析当然可能证明我错了,我的猜测是基于对按位运算的松散假设,所以如果你选择运行一个分析器并想出来,我肯定会对结果感兴趣。

答案 3 :(得分:1)

整体设计的质量所达到的效率相比,您实现的效率是微不足道的。