Comparison of `.call()` performance vs direct function calls

Benchmark created on


Setup

class TargetClass {
	count = 0;
	
	doWork() {
		this.count += 1;
	}
}

let thisFuncCount = 0;
let paramFuncCount = 0;
let thisLambdaCount = 0;
let paramLambdaCount = 0;

function thisFunc(param) {
	thisFuncCount += param;
	this.doWork();
}

function paramFunc(target, param) {
	paramFuncCount += param;
	target.doWork();
}

function executeWithThis(lambda, target) {
	lambda.call(target, 2);
}

function executeWithParam(lambda, target) {
	lambda(target, 2);
}

const sharedTarget = new TargetClass();

Teardown


Test runner

Ready to run.

Testing in
TestOps/sec
This, func, shared
executeWithThis(thisFunc, sharedTarget);
ready
Param, func, shared
executeWithParam(paramFunc, sharedTarget);
ready
Param, lambda, shared
executeWithParam(
  (target, param) => {
  	paramLambdaCount += param;
  	target.doWork();
  },
  sharedTarget,
);
ready
Param, lambda, not shared
executeWithParam(
  (target, param) => {
  	paramLambdaCount += param;
  	target.doWork();
  },
  new TargetClass(),
);
ready

Revisions

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