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
|
||||
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]
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue