Switch vs if vs lookup object

Benchmark created on


Setup

const f1 = () => {}
const f2 = () => {}
const f3 = () => {}
const f4 = () => {}
const f5 = () => {}

function getFnIf(level) {
    if (level === "info") return f1;
    else if (level === "warn") return f2;
    else if (level === "error") return f3;
    else if (level === "fatal") return f4;
    else return f5;
}

function getFnSwitch(level) {
    switch (level) {
        case "warn":
            return f1;
        case "info":
            return f2;
        case "error":
            return f3;
        case "fatal":
            return f4;
        default:
            return f5;
    }
}

const lookup = {
    'info': f1,
    'warn': f2,
    'error': f3,
    'fatal': f4
}

function getFnLookupString(level) {
    return lookup[level] || f5
}

const lookupN = {
    '1': f1,
    '2': f2,
    '3': f3,
    '4': f4
}

function getFnLookupN(level) {
    return lookupN[level] || f5
}

const arr = [f1,f2,f3,f4,f5]
function getFnLookupA(level) {
    return lookupN[level] || f5
}

Test runner

Ready to run.

Testing in
TestOps/sec
if
getFnIf('info')
getFnIf('warn')
getFnIf('error')
getFnIf('fatal')
getFnIf()
ready
switch
getFnSwitch('info')
getFnSwitch('warn')
getFnSwitch('error')
getFnSwitch('fatal')
getFnSwitch()
ready
lookup with strings
getFnLookupString('info')
getFnLookupString('warn')
getFnLookupString('error')
getFnLookupString('fatal')
getFnLookupString()
ready
lookup with number
getFnLookupN('1')
getFnLookupN('2')
getFnLookupN('3')
getFnLookupN('4')
getFnLookupN()
ready
lookup in array
getFnLookupA(0)
getFnLookupA(1)
getFnLookupA(2)
getFnLookupA(3)
getFnLookupA()
ready

Revisions

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