其中一个更快吗?foo & lt;Bar) if (foo >酒吧)
Is one of them quicker: if (!foo < bar) if (foo > bar)?
出于好奇。我检查某个字符串是否长于最大指定长度:
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实现的行为都会略有不同。
还要确保检查"过早优化",例如在维基百科关于程序优化的文章中("何时优化"一节)。
- 在<页眉>标签
- 如何更改<svg>标记为<img>用js标记
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- Ajax文件加载和<输入>文件加载
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 链接所有<a>Meteor
- 在<输入类型=“;文件“/>
- Div根据<选择>菜单
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- 如何首先设置样式<td>表中包含在窗体中的元素
- 通过点击<李>在jQuery中
- 正在检测导航到<a name=“;最新主题”></a>
- 如何更改<选择>使用angularJS从控制器获得的值
- 通过具有IE<11
- 如何附加<ul><李>元素位于某个特定条件的父元素列表之间
- 渲染<选项值=“;foo”;选择>在服务器上
- <body onload=foo()>不会't调用foo
- <a href="javascript:foo(this)">通过Window,我想要标记
- 其中一个更快吗?foo & lt;Bar) if (foo >酒吧)
- 在整个html文档中搜索精确的代码""<br>foo<br>"并将其