applyFn

Benchmark created by JLRishe on


Setup

function applyFn1(fn, args, ctx) {
        switch (args.length) {
            case 0: return fn.call(ctx); break;
            case 1: return fn.call(ctx, args[0]); break;
            case 2: return fn.call(ctx, args[0], args[1]); break;
            case 3: return fn.call(ctx, args[0], args[1], args[2]); break;
            default: return fn.apply(ctx, args);
        }
    }
    
    function applyFn2(fn, args, ctx) {
        if (4 in args) return fn.apply(ctx, args);
        if (3 in args) return fn.call(ctx, args[0], args[1], args[2], args[3]);
        if (2 in args) return fn.call(ctx, args[0], args[1], args[2]);
        if (1 in args) return fn.call(ctx, args[0], args[1]);
        if (0 in args) return fn.call(ctx, args[0]);
        return fn.call(ctx); // ಠ_ಠ
    }
    
    function func() {
    }
    
    var arr0 = [];
    var arr4 = [1, 2, 3, 4];

Test runner

Ready to run.

Testing in
TestOps/sec
Option 1, 0 args
applyFn1(func, arr0);
ready
Option 2, 0 args
applyFn2(func, arr0);
ready
Option 1, 4 args
applyFn1(func, arr4);
ready
Option 2, 4 args
applyFn2(func, arr4);
ready

Revisions

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

  • Revision 1: published by JLRishe on