Hi,

I had some time and used it to read through the current SVN-code searching for 
possible improvements. My time was not enough to go through all the code, but 
at least I could check jquery.js. I have some suggestions which you might 
whant to evaluate.

I. each
-------

This implementation is a bit longer but should usually be faster as well:

----
each: Array.forEach?function( obj, fn, args ) {
        var fe = (obj.length == undefined)?
                function(o,f) {
                        for( var i in o ) f.call(o[i],i);
                }:Array.forEach;
        if( args ) fe(obj,function(o){ fn.apply(o,args); });
        else       fe(obj,function(o,i){ fn.apply(o,[i,o]); });
        return obj;
}:function( obj, fn, args ) {
        var fe = (obj.length == undefined)?
                function(o,f) {
                        for( var i in o ) f.call(o[i],i);
                }:function(o,f) {
                        for( var i = 0; i < o.length; i++ ) f.call(o[i],i);
                };
        if( args ) fe(obj,function(o){ fn.apply(o,args); });
        else       fe(obj,function(o,i){ fn.apply(o,[i,o]); });
        return obj;
},
----

1. In case a native implementation is available I expect it to be faster than 
any other possible solution (use Array.forEach if avaliable).
2. I took the check for the parameter 'args' out of the loop. It only has to 
be evaluated once.

II. className
-------------

className: {
        add: function(o,c){
                if (jQuery.className.has(o,c)) return;
                o.className += ( o.className ? " " : "" ) + c;
        },
        remove: function(o,c){
                if( !c ) { o.className = ''; return; }
                var cns = o.className.split(' ');
                var cns2 = [];
                for( var i = 0; i < cns.length; i++ ) if( cns[i] != c ) 
cns2.push(cns[i]);
                o.className = cns2.join(' ');
        },
        has: function(e,a) {
                if ( e.className != undefined ) e = e.className;
                var cns = e.split(' ');
                for( var i = 0; i < cns.length; i++ ) if( cns[i] != a ) return 
true;
                return false;
        }
},

I'm not shure if that really speeds up things so much. Generally speaking 
regular expressions need more calculations to be evaluated than a simple 
character comparisions.

I guess, many people use these className-manipulation functions quite often. 

III new function() {...}
------------------------

I am pretty shure that (function() {...})() is faster. You spare the creation 
of an object that you never use for each of these constructs.

On the other hand I have not found these constructs in some inner loops yet. 
The overhead might be acceptable here, but I also don't think that new 
function() {...} is less readable than (function() {...})().


I have not measured these suggestions now. What do you think about them?

Christof

_______________________________________________
jQuery mailing list
discuss@jquery.com
http://jquery.com/discuss/

Reply via email to