ensurens: optimizations
authorKrzysztof Antoszek <k.antoszek@samsung.com>
Wed, 10 Apr 2013 10:20:55 +0000 (12:20 +0200)
committerYoumin Ha <youmin.ha@samsung.com>
Tue, 16 Apr 2013 04:38:21 +0000 (13:38 +0900)
- decreased eval calls
- added a top->down while loop for faster iterations
- added internal cache to prevent pointless declarations
- fixed ensurens inclusions for proper build order
- changed eval to function creation which is faster

Change-Id: Ibae2f0db9b1a2b76ae4bf658b5187984c64ece10

src/js/jquery.mobile.tizen.clrlib.js
src/js/jquery.mobile.tizen.loadprototype.js
src/js/util/ensurens.js

index 1f8eb2c..3c349d4 100644 (file)
@@ -3,7 +3,7 @@
 //>>label: Color library
 //>>group: Tizen:Core
 
-define( [ ], function ( ) {
+define( [ 'util/ensurens' ], function ( ) {
 //>>excludeEnd("jqmBuildExclude");
 
 ensureNS("jQuery.mobile.tizen.clrlib");
index b14b860..7fad4b0 100644 (file)
@@ -3,7 +3,7 @@
 //>>label: Widget prototype loader
 //>>group: Tizen:Core
 
-define( [ ], function ( ) {
+define( [ 'util/ensurens' ], function ( ) {
 //>>excludeEnd("jqmBuildExclude");
 
 (function($, undefined) {
index 71c8c83..ad8e0a1 100644 (file)
@@ -37,15 +37,25 @@ define( [ ], function ( ) {
 // Ensure that the given namespace is defined. If not, define it to be an empty object.
 // This is kinda like the mkdir -p command.
 
-function ensureNS(ns) {
-    var nsAr = ns.split("."),
-    nsSoFar = "";
-
-    for (var Nix in nsAr) {
-        nsSoFar = nsSoFar + (Nix > 0 ? "." : "") + nsAr[Nix];
-        eval (nsSoFar + " = " + nsSoFar + " || {};");
-    }
-}
+var ensureNS = (function () {
+       var internalCache = {};
+       return function ensureNS (ns) { // name just for debugging purposes
+               var nsArr = ns.split(".").reverse(),
+                       nsSoFar = "",
+                       buffer = "",
+                       leaf = "",
+                       l = nsArr.length;
+               while(--l >= 0) {
+                       leaf = nsArr[l];
+                       nsSoFar = nsSoFar + (nsSoFar.length > 0 ? "." : "") + leaf;
+                       if (!internalCache[nsSoFar]) {
+                               internalCache[nsSoFar] = true;
+                               buffer += "!window." + nsSoFar + ' && (window.' + nsSoFar + " = {});\n";
+                       }
+               }
+               buffer.length && (new Function(buffer))();
+       };
+})();
 
 //>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
 } );