Script Preparation code:
x
 
function defaultEqualityCheck(a, b) {
  return a === b
}
function defaultMemoize_original(func, equalityCheck = defaultEqualityCheck) {
  let lastArgs = null
  let lastResult = null
  return (...args) => {
    if (
      lastArgs === null ||
      lastArgs.length !== args.length ||
      !args.every((value, index) => equalityCheck(value, lastArgs[index]))
    ) {
      lastResult = func(...args)
    }
    lastArgs = args
    return lastResult
  }
}
function defaultMemoize_optimized(func, equalityCheck = defaultEqualityCheck) {
  const isEqual = (value, index) => equalityCheck(value, lastArgs[index])
  let lastArgs = null
  let lastResult = null
  return (...args) => {
    if (
      lastArgs === null ||
      lastArgs.length !== args.length ||
      !args.every(isEqual)
    ) {
      lastResult = func(...args)
    }
    lastArgs = args
    return lastResult
  }
}
function combine(a, b) {
  return { combined: a + b };
}
var combine_original = defaultMemoize_original(combine);
var combine_optimized = defaultMemoize_optimized(combine);
var NUM_REPEAT = 50000;
Tests:
  • Original defaultMemoize

     
    let result1 = 0;
    for (let i = 0; i < NUM_REPEAT; ++i) 
      result1 += combine_original(1, 2).combined;
  • Optimized defaultMemoize

     
    let result2 = 0;
    for (let i = 0; i < NUM_REPEAT; ++i) 
      result2 += combine_optimized(1, 2).combined;
  • No memoization

     
    let result3 = 0;
    for (let i = 0; i < NUM_REPEAT; ++i) 
      result3 += combine(1, 2).combined;
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    Original defaultMemoize
    Optimized defaultMemoize
    No memoization

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: one year ago)
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36
Chrome 121 on Mac OS X 10.15.7
View result in a separate tab
Test name Executions per second
Original defaultMemoize 284.4 Ops/sec
Optimized defaultMemoize 292.6 Ops/sec
No memoization 321.6 Ops/sec