early return vs single return (v2)

Revision 2 of this benchmark created by notoriousb1t on


Description

A quick test of the performance of returning early in a method vs storing a returnValue and returning the value at the end of the method. Equivalent tests for switchs.

Test runner

Ready to run.

Testing in
TestOps/sec
early return (if/else)
function earlyReturn(val) {
  if (val === 0) {
    return '0';
  }
  if (val === 1) {
    return '1';
  }
  if (val === 2) {
    return '2';
  }
  if (val === 3) {
    return '3';
  }
  return 'none of the above';
}

var values = [];
for (var i = 0; i < 50000; i++) {
  values.push(earlyReturn(i % 3));
}
ready
single return
function singleReturn(val) {
  var retValue;
  if (val === 0) {
    retValue = '0';
  } else if (val === 1) {
    retValue = '1';
  } else if (val === 2) {
    retValue = '2';
  } else if (val === 3) {
    retValue = '3';
  } else {
    retValue = 'none of the above';
  }
  return retValue;
}

var values = [];
for (var i = 0; i < 50000; i++) {
  values.push(singleReturn(i % 2 === 0));
}
ready
early return (switch)
function earlyReturnSwitch(val) {
  switch (val) {
    case 0:
      return '0';
    case 1:
      return '1';
    case 2:
      return '2';
    case 3:
      return '3'
    default:
      return 'none of the above';
  }
}

var values = [];
for (var i = 0; i < 50000; i++) {
  values.push(earlyReturnSwitch(i % 3));
}
ready
single return (switch)
function singleReturnSwitch(val) {
  var retValue;
  switch (val) {
    case 0:
      retValue = '0';
      break;
    case 1:
      retValue = '1';
      break;
    case 2:
      retValue = '2';
      break;
    case 3:
      retValue = '3'
      break;
    default:
      retValue = 'none of the above';
      break;
  }
  return retValue;
}

var values = [];
for (var i = 0; i < 50000; i++) {
  values.push(singleReturnSwitch(i % 3));
}
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.

  • Revision 1: published by notoriousb1t on
  • Revision 2: published by notoriousb1t on