Memoization with custom function properties

JavaScript performance comparison

Revision 2 of this test case created by Addy Osmani

Preparation code

<script>
  //by @philogb and @addyosmani
  function memoize2(fn) {
        return function () {
            var args = Array.prototype.slice.call(arguments),
                hash = "",
                i  = args.length;
            while(i--){
              hash += (Object.prototype.toString.call({}) == Object.prototype.toString.call(args[i])) ? JSON.stringify(args[i]) : args[i];
              fn.memoize = fn.memoize || {};
          }
            return (hash in fn.memoize) ? fn.memoize[hash] : fn.memoize[hash] = fn.apply(this, args);
        };
    }
 
 
  //unscriptables version of stoyans memoizer
  function memoize7(param){
      if (!memoize7.cache) {
          memoize7.cache = {};
      }
      if (!memoize7.cache[param]) {
               
          console.log(param);
          var result = fib(param);
          memoize7.cache[param] = result;
      }
      return memoize7.cache[param];
  }
 
 
 
 
 
   var fib, fiborg, f;
    fiborg = fib = f = function (x) {
        if(x < 2) return 1; else return fib(x-1) + fib(x-2);
    }
 
   
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
philogb and addy's version
fib = memoize2(fiborg);
console.log(fib(20),'test1-norm');
pending…
stoyans
console.log(memoize7(20),'test7-norm');
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:

0 comments

Add a comment