3

我使用 JavaScript,但我总是想知道所有语言的这一点。

我这样做会获得更好的性能吗:

var i = 0;
if(j < 0) 
{
   i = 1;
}

或这个?

var i;
if(j < 0) 
{
    i = 1;
}
else 
{
    i = 0;
}

有 50% 的机会拥有j < 0

4

2 回答 2

4

这将取决于 javascript 引擎的实现,至少如果您为 Web 编写代码,它是您无法控制的。

一个浏览器使用第一个版本的代码可能更快,另一个使用第二个版本。明天它可能会改变。

除非您已将这一行代码确定为任务的瓶颈,否则不要优化此类事情。

您可能想阅读何时优化

您将更好地编写可读且设计良好的代码,并让浏览器供应商担心机器级别的优化。

您应该优化的是算法,而不是特定于语言的结构。

于 2013-11-05T10:12:55.670 回答
2

您的代码都没有太大的区别。当然取决于 JS 引擎,但今天的引擎非常先进,并且对代码进行了很好的优化(尤其是 chrome 和 node.js 上的 V8)。

对其进行基准测试。您console.time('label'); console.timeEnd('label')至少可以在 Chrome 中使用 simple 。

在我看来,您的代码看起来很丑,而且很臃肿。没有内容就消耗了大量空间。我更喜欢这种方法,因为它的读取速度更快,并且您应该像关心性能一样关心可读性

var i;    
if(j < 0) {
    i = 1;
} else {
    i = 0;
}

您还可以访问三元运算符:

var i = j < 0 ? 1 : 0;

如果你不嵌套它是可读的。再一次 - 在性能方面,所有这些都是平等的,并且可能会相差一两毫秒,所以在这种简单的情况下你不应该关心性能。关心可读性:)

此外,性能将取决于您的 j 值。如果优化器会看到您设置了j to 1. 它将使整个代码短路并简单地设置i = 0. 恕我直言,在这种简单的情况下,除了可读性之外,花时间寻找改进是没有用的:)。

于 2013-11-05T10:19:19.537 回答