@samitouri / QOS-React-2 / commits / 510146eb6d
Fork 0

The library for web and native user interfaces.

Faster Listener Deletion

Whenever a component is unmounted, we delete all listeners that might have been attached. This sucks because most applications, Facebook included, do not use every listener. There's a lot of wasted computation, especially if many components are mounted and unmounted. This changes `deleteAllListeners` to more delete listeners more efficiently.

Tim Yung committed Jul 3, 2013 at 11:33 UTC 510146eb6dff1dd0f7babfa9df47a9c7e465648e
2 files changed +15 -14
src/event/CallbackRegistry.js
+14 -3
@@ -35,7 +35,7 @@ var CallbackRegistry = {
35 /**
36 * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.
37 *
38 - * @param {string} id ID of the DOM node.
38 + * @param {string} id ID of the DOM element.
39 * @param {string} registrationName Name of listener (e.g. `onClick`).
40 * @param {?function} listener The callback to store.
41 */
@@ -46,7 +46,7 @@ var CallbackRegistry = {
46 },
47
48 /**
49 - * @param {string} id ID of the DOM node.
49 + * @param {string} id ID of the DOM element.
50 * @param {string} registrationName Name of listener (e.g. `onClick`).
51 * @return {?function} The stored callback.
52 */
@@ -58,7 +58,7 @@ var CallbackRegistry = {
58 /**
59 * Deletes a listener from the registration bank.
60 *
61 - * @param {string} id ID of the DOM node.
61 + * @param {string} id ID of the DOM element.
62 * @param {string} registrationName Name of listener (e.g. `onClick`).
63 */
64 deleteListener: function(id, registrationName) {
@@ -68,6 +68,17 @@ var CallbackRegistry = {
68 }
69 },
70
71 + /**
72 + * Deletes all listeners for the DOM element with the supplied ID.
73 + *
74 + * @param {string} id ID of the DOM element.
75 + */
76 + deleteAllListeners: function(id) {
77 + for (var registrationName in listenerBank) {
78 + delete listenerBank[registrationName][id];
79 + }
80 + },
81 +
82 /**
83 * This is needed for tests only. Do not use!
84 */
src/event/EventPluginHub.js
+1 -11
@@ -112,17 +112,7 @@ var EventPluginHub = {
112
113 deleteListener: CallbackRegistry.deleteListener,
114
115 - /**
116 - * Deletes all listeners for the DOM element with the supplied ID.
117 - *
118 - * @param {string} domID ID of a DOM element.
119 - */
120 - deleteAllListeners: function(domID) {
121 - var registrationNamesKeys = EventPluginRegistry.registrationNamesKeys;
122 - for (var ii = 0; ii < registrationNamesKeys.length; ii++) {
123 - CallbackRegistry.deleteListener(domID, registrationNamesKeys[ii]);
124 - }
125 - },
115 + deleteAllListeners: CallbackRegistry.deleteAllListeners,
116
117 /**
118 * Allows registered plugins an opportunity to extract events from top-level