nl_tokens: -- module -- name : _createExecutionOrder - private method description : creates the execution order for a template based on its needs .
pl_tokens: function ( master ) { _reduceNeeds . call ( this , master ) ; //Rules for out of order execution: //Goal: We want to get anything that is ambiguous or requires a callback //to execute ASAP because they will be our bottlenecks. //Ambiguity means that we don't know if the element will affect anything after it, // so it's safest to assume that it will affect everything after it. //Something that needs a callback is an element that either has a lot of //	process time around it and so should tell the template to wait for it. //	Or, it is something that needs to make a call to another service, and will, //	itself, be idling for a response, that the template needs. //We want to execute or callbacks, stop processing, and wait for them to get back to us.  //1. Anything that modifies or sets something needs to execute in //	order against anything that needs that thing (go it! :). //2. Anything that is ambiguous acts as a break point, nothing after it //	can render until it's done, ambiguity trumps callbacks. But //	ambiguous things can have callbacks. //3. Anything that doesn't need anything can render at anytime, but, //	ideally, should render as close to the order it is in, when possible. //Note: Contrary to intuition, going in order is actually ideal, save for // our bottlenecks, because the more we can do in order the more we // can buffer to the server in the appropriate order. this . _executionOrders = [ ] ; this . _inAlready = { } ; var i = this . callBackDocs . length , index , l ; //figure ambiguity out while ( i -- ) { if ( this . _inAlready [ index . toString ( ) ] ) continue ; this . _executionOrders . unshift ( [ ] ) ; index = this . callBackDocs [ i ] ; this . _inAlready [ <mask> . toString ( ) ] = true ; _orderNeedsByObject . call ( this , index ) ; this . _executionOrders [ 0 ] . push ( index ) ; } //put everything else in this . _executionOrders . push ( [ ] ) ; l = this . _executionStack . length ; i = 0 ; while ( i < l ) { if ( this . _inAlready [ i . toString ] ) continue ; this . _inAlready [ i . toString ( ) ] = true ; _orderNeedsByObject . call ( this , i ) ; this . _executionOrders [ 0 ] . push ( i ) ; i ++ ; } this . _executionThreadLength = this . _executionOrders . length }