i writing nodejs heap , performance important. have following code:
while(true) if(x) return if(y) ... return if(z) ... else return i advised use
break
instead of
return
and put single return @ end avoid duplicate code , make more readable. there performance drop , if significant?
in other words:
is there downside using breaks in loop use return after loop instead of using return in first place?
i wrote following code attempt test problem:
// 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 () { (var = 0; < 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 () { (var = 0; < 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) { (var = 0; < iterations; i++) { var result = testa(); } } else { (var = 0; < iterations; i++) { var result = testb(); } } console.timeend('benchmark'); upon execution got these results (5 samples):
benchmarking break:
22262msbenchmarking return:21947msbenchmarking break:
22549msbenchmarking return:22180msbenchmarking break:
22443msbenchmarking return:22143msbenchmarking break:
22304msbenchmarking return:22109msbenchmarking break:
22293msbenchmarking return:22003ms
total: break: 111851ms, return: 110382ms, difference: 1469ms (1.3%)
if benchmark code similar yours i'd safely there no significant performance difference between both variations.
Comments
Post a Comment