avoid creating a new data cache if we don't need one. Also, short-circuit the case where $.data is used to get the cache id

This commit is contained in:
Yehuda Katz 2009-09-15 07:59:53 +00:00
parent 19cd84cf32
commit c4f144eeff

View File

@ -1,4 +1,5 @@
var expando = "jQuery" + now(), uuid = 0, windowData = {}; var expando = "jQuery" + now(), uuid = 0, windowData = {};
var emptyObject = {};
jQuery.extend({ jQuery.extend({
cache: {}, cache: {},
@ -10,24 +11,28 @@ jQuery.extend({
windowData : windowData :
elem; elem;
var id = elem[ expando ], cache = jQuery.cache; var id = elem[ expando ], cache = jQuery.cache, thisCache;
// Compute a unique ID for the element // Compute a unique ID for the element
if(!id) id = elem[ expando ] = ++uuid; if(!id) id = elem[ expando ] = ++uuid;
// Only generate the data cache if we're // Handle the case where there's no name immediately
// trying to access or manipulate it if ( !name ) { return id; }
if ( name && !cache[ id ] )
cache[ id ] = {};
var thisCache = cache[ id ]; // Avoid generating a new cache unless none exists and we
// want to manipulate it.
if( cache[ id ] )
thisCache = cache[ id ];
else if( typeof data === "undefined" )
thisCache = emptyObject;
else
thisCache = cache[ id ] = {};
// Prevent overriding the named cache with undefined values // Prevent overriding the named cache with undefined values
if ( data !== undefined ) thisCache[ name ] = data; if ( data !== undefined ) thisCache[ name ] = data;
if(name === true) return thisCache; if(name === true) return thisCache;
else if(name) return thisCache[name]; else return thisCache[name];
else return id;
}, },
removeData: function( elem, name ) { removeData: function( elem, name ) {