Rework event diffing for better optimizability

Re-ordered the type checks so that I can avoid polymorphic property
lookups in event updates. (It improved the common case of no change by
a little over ~40%.)
This commit is contained in:
Isiah Meadows 2017-09-01 17:06:19 -04:00
parent d150e71a85
commit a1a7038e55

View file

@ -593,14 +593,19 @@ module.exports = function($window) {
//event
function updateEvent(vnode, key, value) {
if (typeof value === "function" || value != null && typeof value === "object") {
if (vnode.events == null) vnode.events = new EventDict()
if (vnode.events != null) {
if (vnode.events[key] === value) return
if (vnode.events[key] == null) vnode.dom.addEventListener(key.slice(2), vnode.events, false)
if (value != null && (typeof value === "function" || typeof value === "object")) {
if (vnode.events[key] == null) vnode.dom.addEventListener(key.slice(2), vnode.events, false)
vnode.events[key] = value
} else {
if (vnode.events[key] != null) vnode.dom.removeEventListener(key.slice(2), vnode.events, false)
vnode.events[key] = undefined
}
} else if (value != null && (typeof value === "function" || typeof value === "object")) {
vnode.events = new EventDict()
vnode.dom.addEventListener(key.slice(2), vnode.events, false)
vnode.events[key] = value
} else if (vnode.events != null) {
if (vnode.events[key] != null) vnode.dom.removeEventListener(key.slice(2), vnode.events, false)
delete vnode.events[key]
}
}