switch vs array vs obj

JavaScript performance comparison

Revision 2 of this test case created by tomByrer

Info

Revision 2: added name only; I didn't edit anything else. Note: assumes orderly sequential selections, which is never the case in reality.

Preparation code

<script>
  var loopCnt = 20;

  var i = 0;
  var a = 0;
  var arr = [function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }, function() {
    a++;
  }]
  var obj = {
    0: function() {
      a++;
    },
    1: function() {
      a++;
    },
    2: function() {
      a++;
    },
    3: function() {
      a++;
    },
    4: function() {
      a++;
    },
    5: function() {
      a++;
    },
    6: function() {
      a++;
    },
    7: function() {
      a++;
    },
    8: function() {
      a++;
    },
    9: function() {
      a++;
    },
    10: function() {
      a++;
    },
    11: function() {
      a++;
    },
    12: function() {
      a++;
    },
    13: function() {
      a++;
    },
    14: function() {
      a++;
    },
    15: function() {
      a++;
    },
    16: function() {
      a++;
    },
    17: function() {
      a++;
    },
    18: function() {
      a++;
    },
    19: function() {
      a++;
    },
    20: function() {
      a++;
    },
    21: function() {
      a++;
    },
    22: function() {
      a++;
    },
    23: function() {
      a++;
    },
    24: function() {
      a++;
    },
    25: function() {
      a++;
    },
    26: function() {
      a++;
    },
    27: function() {
      a++;
    }
  }
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
switch
for (i = 0; i < loopCnt; i++) {
  switch (i) {
  case 0:
    a++;
    break;

  case 1:
    a++;
    break;

  case 2:
    a++;
    break;
  case 3:
    a++;
    break;
  case 4:
    a++;
    break;

  case 5:
    a++;
    break;
  case 6:
    a++;
    break;
  case 7:
    a++;
    break;

  case 8:
    a++;
    break;
  case 9:
    a++;
    break;
  case 10:
    a++;
    break;

  case 11:
    a++;
    break;
  case 12:
    a++;
    break;
  case 13:
    a++;
    break;

  case 14:
    a++;
    break;
  case 15:
    a++;
    break;
  case 16:
    a++;
    break;

  case 17:
    a++;
    break;
  case 18:
    a++;
    break;
  case 19:
    a++;
    break;

  case 20:
    a++;
    break;
  case 21:
    a++;
    break;
  case 22:
    a++;
    break;

  case 23:
    a++;
    break;
  case 24:
    a++;
    break;

  }
}
pending…
array
for (i = 0; i < loopCnt; i++) {
  arr[i]();
}
pending…
obj
for (i = 0; i < loopCnt; i++) {
  arr[i]();
}
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:

0 comments

Add a comment