Nested Named Functions compared to Module Pattern

JavaScript performance comparison

Revision 3 of this test case created by gdsf

Info

Demonstrating the performance hit caused by nested functions and testing against module pattern.

Preparation code

<script>
  (function() {

    // Nested function
    person = function(age) {
      function getNextAge() {
        return age + 1;
      }
      return getNextAge();
    }

    // Non nested function inner function

    function getNextAge2(age) {
      return age + 1;
    }

    // Non nested function
    person2 = function(age) {
      return getNextAge2(age);
    }

  }());

// YUI style (http://www.yuiblog.com/blog/2007/06/12/module-pattern/)
var myNamespace = myNamespace || {};
myNamespace.module1 = (function() {  
    //"private" method:
    var getNextAge3 = function(age) {
        return age + 1;
    }          
     
    return {
        person3: function(age) {
            return getNextAge3(age);
        }
    };
}());


// Adding New Functionality to the person4
// http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-1/
(function( person4, $, undefined ) {
                   
    person4.Age = 0;
                               
    //Public Method
    person4.getNextAge = function() {
        return person4.Age + 1;
    };    
}( window.person4 = window.person4 || {}, {} ));

</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
Optimized (No Nesting)
person2(10);
pending…
Nested Function
person(10);
pending…
Module Pattern (YUI style (http://www.yuiblog.com/blog/2007/06/12/module-pattern/))
myNamespace.module1.person3(10);
pending…
Another Module Pattern (http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-1/)
person4.Age = 10;
person4.getNextAge()
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:

1 comment

gdsf (revision owner) commented :

Quick test comparing nested functions and module pattern

Add a comment