其中一个更快吗?foo & lt;Bar) if (foo >酒吧)

Is one of them quicker: if (!foo < bar) if (foo > bar)?

本文关键字:foo lt if 酒吧 Bar 一个      更新时间:2023-09-26

出于好奇。我检查某个字符串是否长于最大指定长度:

var name = "This Is a Name";
if (!name.length >= 10)
{
    //valid length
}
else
{
    alert("Too long");
}

这样更好/更快吗?

if (name.length <= 10)

我记得在一些语言中,最好先写否定,所以是不是更好(喂,我刚刚写过)像这样(?):

if (10 >= name.length)

我知道10在代码中是重叠的——不要介意。我只是想知道在这方面是否有任何性能/最佳实践

我几乎总是使用<<=而不是>>=。我发现总是将较小的值放在左边(当测试成功时)可以更快地进行精神解析。它还可以进行范围测试:

if (0 <= a && a < 10) …

读起来更像是数学上的等价0≤a <10 .

性能方面,如果有任何可测量的差异,我会感到惊讶。

这是你无法控制的,解释器会做它认为正确的事情。现在的Javascript解释器可能非常先进,它们会对这一点进行优化,但更有可能的是,这些解释器本身是用编译器编译的,编译器会对翻译本身进行优化,所以它甚至不受编写解释器的人的控制。

如果你想要一种语言来控制这种行为,你需要asm。即使在(优化的)C中,你也不能真正控制这个

唯一可以肯定的是n.length > 9可以稍微快一点,因为它包含更少的字符,所以它将被更快地解析。我们说的是纳秒,甚至皮秒。

让我对你的最后一个例子进行评论:我相当确定你的if(10 >= name.length)惯例是在糟糕的C编译器警告时代开始的,以避免if(pointer = NULL) { error(); } else { i = *pointer; }类型的错误,因为相反的版本会使错字导致编译器错误。这在无jslint的JavaScript中仍然是令人惊讶的相关,但我不认为它会影响非相等比较。

对于其余的,我也坚定地站在"没有区别"的阵营,即使我没有实验过,我只是想不出合理的原因,顺序会产生性能差异。

如果它实际上不是应用程序的瓶颈,我建议使用最易读的代码,而不是性能最好的代码——即使在性能上有细微的差异,我怀疑在您的情况下是否真的存在这种差异。

在你的情况下,我认为最容易理解的代码段是:

if (name.length <= 10)

如果你真的想从你的代码中获得最大的性能,你将不得不写一些测试;因为在大多数情况下,通用地谈论这是不可能的,例如,几乎每个JavaScript实现的行为都会略有不同。

还要确保检查"过早优化",例如在维基百科关于程序优化的文章中("何时优化"一节)。