我正在写一个nodejs堆,性能真的很重要。我有以下代码:

while(true)
if(x)
 do something
 return
if(y)
 do ...
 return
if(z)
 do ...
else
 return


建议我使用


  打破


代替


  返回


并在结尾处放一个单引号,以避免重复的代码并使代码更具可读性。性能会下降吗?如果有的话,那有什么意义吗?

换一种说法:


  仅在循环中使用中断是否有缺点
  在循环后使用return而不是在第一个循环中使用return
  地点?

最佳答案

我编写了以下代码,以尝试测试此问题:

// license: public domain
var mode = process.argv[2] === 'break' ? false : true;
var iterations = process.argv[3] ? process.argv[1] : 1e9;
var testIterations = process.argv[4] ? process.argv[2] : 1e4;
var number;
var range = 1e9;

function testA () {
    for (var i = 0; i < testIterations; i++) {
        number = Math.floor(Math.random() * range);
        if (Math.floor(number/2) === number/2) {
            number = number/2;
            return number;
        }
        if (number * number > number + number) {
            number = number * 2;
            return number;
        }
        if (number) {
            number = Math.pow(2, Math.ceil(Math.random()*16));
            return number;
        }
        if (1 === true || 1 == true) {
            number = number - number*number + Math.pow(number, Math.PI);
            return number;
        }
    }
}

function testB () {
    for (var i = 0; i < testIterations; i++) {
        number = Math.floor(Math.random() * range);
        if (Math.floor(number/2) === number/2) {
            number = number/2;
            break;
        }
        if (number * number > number + number) {
            number = number * 2;
            break;
        }
        if (number) {
            number = Math.pow(2, Math.ceil(Math.random()*16));
            break;
        }
        if (1 === true || 1 == true) {
            number = number - number*number + Math.pow(number, Math.PI);
            break;
        }
    }
    return number;
}

console.log('benchmarking ' + (mode ? 'return' : 'break'));
console.time('benchmark');
if (mode) {
    for (var i = 0; i < iterations; i++) {
        var result = testA();
    }
} else {
    for (var i = 0; i < iterations; i++) {
        var result = testB();
    }
}
console.timeEnd('benchmark');


执行后,我得到了以下结果(5个样本):


基准测试中断:22262ms
基准回报率:21947ms
基准测试中断:22549ms
基准回报率:22180ms
基准测试中断:22443ms
基准回报率:22143ms
基准测试中断:22304ms
基准回报率:22109ms
基准测试中断:22293ms
基准回报率:22003ms


总计:中断:111851ms,返回:110382ms,差值:1469ms1.3%

如果该基准代码与您的基准代码相似,那么我可以肯定地说,这两个版本之间没有明显的性能差异。

关于javascript - break + return vs return Javascript Node.js,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31428556/

10-10 21:57