switch vs if-else

Benchmark created on


Description

Which is faster?

Setup

const objs = [];

for (let i = 0; i < 100_000; i++) {
	const n = Math.floor(Math.random() * 10);
	objs.push({n});
}

window.trash = 0;

function handle1(obj) {
	window.trash += obj.n;
}

function handle2(obj) {
	window.trash *= obj.n;
}

function handle3(obj) {
	window.trash /= (obj.n + 1);
}

function handle4(obj) {
	window.trash -= obj.n;
}

function handle5(obj) {
	window.trash = obj.n >> 1;
}

function handle6(obj) {
	window.trash = obj.n >> 2;
}

function handle7(obj) {
	window.trash = obj.n >> 3;
}

function handle8(obj) {
	window.trash = obj.n >> 4;
}

function handle9(obj) {
	window.trash = obj.n >> 5;
}

function handle10(obj) {
	window.trash = obj.n >> 6;
}

Test runner

Ready to run.

Testing in
TestOps/sec
switch statement
for (const obj of objs) {
	switch (obj.n) {
		case 1: handle1(obj); break;
		case 2: handle2(obj); break;
		case 3: handle3(obj); break; 
		case 4: handle4(obj); break;
		case 5: handle5(obj); break;
    case 6: handle6(obj); break;
    case 7: handle7(obj); break;
    case 8: handle8(obj); break;
    case 9: handle9(obj); break;
    case 10: handle10(obj); break;
	}
}

console.log(window.trash);
ready
if statement
for (const obj of objs) {
  if (obj.n === 1) {
    handle1(obj);
  } else if (obj.n === 2) {
    handle2(obj);
  } else if (obj.n === 3) {
    handle3(obj);
  } else if (obj.n === 4) {
    handle4(obj);
  } else if (obj.n === 5) {
    handle5(obj);
  } else if (obj.n === 6) {
    handle6(obj);
  } else if (obj.n === 7) {
    handle7(obj);
  } else if (obj.n === 8) {
    handle8(obj);
  } else if (obj.n === 9) {
    handle9(obj);
  } else if (obj.n === 10) {
    handle10(obj);
  }
}

console.log(window.trash);
ready

Revisions

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