refactor: also check for event timestamp
This commit is contained in:
parent
16270edda5
commit
daf166553b
@ -7,22 +7,31 @@ type EventValue = (Function | Function[]) & {
|
|||||||
invoker?: Invoker | null
|
invoker?: Invoker | null
|
||||||
}
|
}
|
||||||
|
|
||||||
// async edge case fix requires storing an event listener's attach timestamp
|
// Async edge case fix requires storing an event listener's attach timestamp.
|
||||||
// to avoid the overhead of repeatedly calling performance.now(), we cache
|
let _getNow: () => number = Date.now
|
||||||
|
|
||||||
|
// Determine what event timestamp the browser is using. Annoyingly, the
|
||||||
|
// timestamp can either be hi-res ( relative to poge load) or low-res
|
||||||
|
// (relative to UNIX epoch), so in order to compare time we have to use the
|
||||||
|
// same timestamp type when saving the flush timestamp.
|
||||||
|
if (
|
||||||
|
typeof document !== 'undefined' &&
|
||||||
|
_getNow() > document.createEvent('Event').timeStamp
|
||||||
|
) {
|
||||||
|
// if the low-res timestamp which is bigger than the event timestamp
|
||||||
|
// (which is evaluated AFTER) it means the event is using a hi-res timestamp,
|
||||||
|
// and we need to use the hi-res version for event listeners as well.
|
||||||
|
_getNow = () => performance.now()
|
||||||
|
}
|
||||||
|
|
||||||
|
// To avoid the overhead of repeatedly calling performance.now(), we cache
|
||||||
// and use the same timestamp for all event listners attached in the same tick.
|
// and use the same timestamp for all event listners attached in the same tick.
|
||||||
let cachedNow: number = 0
|
let cachedNow: number = 0
|
||||||
const p = Promise.resolve()
|
const p = Promise.resolve()
|
||||||
|
const reset = () => {
|
||||||
function getNow() {
|
cachedNow = 0
|
||||||
if (cachedNow) {
|
|
||||||
return cachedNow
|
|
||||||
} else {
|
|
||||||
p.then(() => {
|
|
||||||
cachedNow = 0
|
|
||||||
})
|
|
||||||
return (cachedNow = performance.now())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
const getNow = () => cachedNow || (p.then(reset), (cachedNow = _getNow()))
|
||||||
|
|
||||||
export function patchEvent(
|
export function patchEvent(
|
||||||
el: Element,
|
el: Element,
|
||||||
|
Loading…
Reference in New Issue
Block a user