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:
parent
d150e71a85
commit
a1a7038e55
1 changed files with 11 additions and 6 deletions
|
|
@ -593,14 +593,19 @@ module.exports = function($window) {
|
||||||
|
|
||||||
//event
|
//event
|
||||||
function updateEvent(vnode, key, value) {
|
function updateEvent(vnode, key, value) {
|
||||||
if (typeof value === "function" || value != null && typeof value === "object") {
|
if (vnode.events != null) {
|
||||||
if (vnode.events == null) vnode.events = new EventDict()
|
|
||||||
if (vnode.events[key] === value) return
|
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
|
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]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue