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