Bug Tracker

Changeset 5344

Show
Ignore:
Timestamp:
04/28/08 21:09:27 (7 months ago)
Author:
brandon.aaron
Message:

jQuery.event.fix performance boost. An example: click event was previously ~3ms and is now < 1ms. jQuery.event.trigger also got another small boost in performance.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/jquery/src/event.js

    r5338 r5344  
    185185             
    186186            // Pass along a fake event 
    187             if ( event ) 
    188                 data.unshift( { type: type, target: elem } ); 
     187            if ( event ) { 
     188                data.unshift({  
     189                    type: type,  
     190                    target: elem,  
     191                    preventDefault: function(){},  
     192                    stopPropagation: function(){},  
     193                    timeStamp: +new Date 
     194                }); 
     195                data[0][expando] = true; // no need to fix fake event 
     196            } 
    189197 
    190198            // Enforce the right trigger type 
     
    266274        } 
    267275 
    268         // Clean up added properties in IE to prevent memory leak 
    269         if (jQuery.browser.msie) 
    270             event.target = event.preventDefault = event.stopPropagation = 
    271                 event.handler = event.data = event[expando] = null; 
    272  
    273276        return val; 
    274277    }, 
     
    279282         
    280283        // store a copy of the original event object  
    281         // and clone to set read-only properties 
     284        // and "clone" to set read-only properties 
    282285        var originalEvent = event; 
    283         event = jQuery.extend({}, originalEvent); 
     286        event = { originalEvent: originalEvent }; 
     287        var props = "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" "); 
     288        for ( var i=props.length; i; i-- ) 
     289            event[ props[i] ] = originalEvent[ props[i] ]; 
    284290         
    285291        // Mark it as fixed 
     
    312318        // check if target is a textnode (safari) 
    313319        if ( event.target.nodeType == 3 ) 
    314             event.target = originalEvent.target.parentNode; 
     320            event.target = event.target.parentNode; 
    315321 
    316322        // Add relatedTarget, if necessary