Skip to content
Permalink
Browse files

Optimize cleanData: allow direct access to data_priv for cleanup

  • Loading branch information
rwaldron authored and dmethvin committed Apr 17, 2013
1 parent 5e8a5f4 commit c1b8edfcc90961290f7555c55851209bc860c0b4
Showing with 25 additions and 23 deletions.
  1. +3 −1 src/data.js
  2. +22 −22 src/manipulation.js
@@ -185,7 +185,9 @@ Data.prototype = {
);
},
discard: function( owner ) {
delete this.cache[ this.key( owner ) ];
if ( owner[ this.expando ] ) {
delete this.cache[ owner[ this.expando ] ];
}
}
};

@@ -433,35 +433,35 @@ jQuery.extend({
},

cleanData: function( elems ) {
var data, elem, type,
l = elems.length,
i = 0,
special = jQuery.event.special;

for ( ; i < l; i++ ) {
elem = elems[ i ];

if ( jQuery.acceptData( elem ) ) {
var data, elem, events, type, key, j,
special = jQuery.event.special,
i = 0;

data = data_priv.access( elem );
for ( ; (elem = elems[ i ]) !== undefined; i++ ) {
if ( Data.accepts( elem ) ) {
key = elem[ data_priv.expando ];

if ( data ) {
for ( type in data.events ) {
if ( special[ type ] ) {
jQuery.event.remove( elem, type );
if ( key && (data = data_priv.cache[ key ]) ) {
events = Object.keys( data.events || {} );
if ( events.length ) {
for ( j = 0; (type = events[j]) !== undefined; j++ ) {
if ( special[ type ] ) {
jQuery.event.remove( elem, type );

// This is a shortcut to avoid jQuery.event.remove's overhead
} else {
jQuery.removeEvent( elem, type, data.handle );
// This is a shortcut to avoid jQuery.event.remove's overhead
} else {
jQuery.removeEvent( elem, type, data.handle );
}
}
}
if ( data_priv.cache[ key ] ) {
// Discard any remaining `private` data
delete data_priv.cache[ key ];
}
}
}
// Discard any remaining `private` and `user` data
// One day we'll replace the dual arrays with a WeakMap and this won't be an issue.
// (Splices the data objects out of the internal cache arrays)
data_user.discard( elem );
data_priv.discard( elem );
// Discard any remaining `user` data
delete data_user.cache[ elem[ data_user.expando ] ];
}
},

0 comments on commit c1b8edf

Please sign in to comment.
You can’t perform that action at this time.