打破+返回与返回JavaScript Nodejs

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

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

我被build议使用

打破

代替

返回

并在最后放置一个单一的返回以避免重复的代码并使其更具可读性。 是否有一个性能下降,如果是这样,是否有什么重要的?

换一种说法:

在循环中使用中断只是为了在循环之后使用返回,而不是首先使用返回吗?

我写了下面的代码作为testing这个问题的尝试:

 // 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个样本):

  1. 基准突破: 22262ms基准回报: 21947ms

  2. 标杆突破: 22549ms标杆收益: 22180ms

  3. 标杆突破: 22443ms标杆收益: 22143ms

  4. 标杆突破: 22304ms标杆收益: 22109ms

  5. 标杆突破: 22293ms标杆收益: 22003ms

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

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

我能想到的主要区别是在函数内部使用

 function x() { var i = 1; while (i++) { console.log(i); if (i == 10) break; } console.log('outside'); }; x(); 

break会退出循环,但是return将退出该函数。