switch vs object literal vs module (v8)

Revision 8 of this benchmark created by LJHarb on


Preparation HTML

<script>
  // alternatives to switch
  var switchObj = {  
   alpha: function () {
     return true;
   },
   beta: function () {
     return false;
   },
   gamma: function () {
     return false;
   }
  },
  switchModule = (function () {
    return {
      alpha: function () {
        return true;
      },
      beta: function () {
        return false;
      },
      gamma: function () {
        return false;
      }
    };
   })();
  
  // called by switch 
  var alpha = function () {
    return true;
  };
  var beta = function () {
    return false;
  };
  var gamma = function () {
    return false;
  };
  
  // test var
  var foo1 = 'alpha';
  var foo2 = 'beta';
  var foo3 = 'gamma';

  var defaultFunc = function defaultFunc() { };

  var args = [];
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
switch
switch (foo1) {
  case "alpha":
    alpha.apply(null, args);
    break;
  case "beta":
    beta.apply(null, args);
    break;
  case "gamma":
    gamma.apply(null, args);
    break;
  default:
    defaultFunc.apply(null, args);
    break;
}

switch (foo2) {
  case "alpha":
    alpha.apply(null, args);
    break;
  case "beta":
    beta.apply(null, args);
    break;
  case "gamma":
    gamma.apply(null, args);
    break;
  default:
    defaultFunc.apply(null, args);
    break;
}
switch (foo3) {
  case "alpha":
    alpha.apply(null, args);
    break;
  case "beta":
    beta.apply(null, args);
    break;
  case "gamma":
    gamma.apply(null, args);
    break;
  default:
    defaultFunc.apply(null, args);
    break;
}
ready
object literal
var bar = switchObj[foo1];
if (bar) { bar.apply(null, args) } else { defaultFunc.apply(null, args); }

var bar = switchObj[foo2];
if (bar) { bar.apply(null, args) } else { defaultFunc.apply(null, args); }

var bar = switchObj[foo3];
if (bar) { bar.apply(null, args) } else { defaultFunc.apply(null, args); }
ready
module
var bar = switchModule[foo1];
if (bar) { bar.apply(null, args); } else { defaultFunc.apply(null, args); }

var bar = switchModule[foo2];
if (bar) { bar.apply(null, args); } else { defaultFunc.apply(null, args); }

var bar = switchModule[foo3];
if (bar) { bar.apply(null, args); } else { defaultFunc.apply(null, args); }
 
ready

Revisions

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