|
|
@@ -8,7 +8,8 @@ import {
|
|
|
warn,
|
|
|
nextTick,
|
|
|
devtools,
|
|
|
- inBrowser
|
|
|
+ inBrowser,
|
|
|
+ isIE
|
|
|
} from '../util/index'
|
|
|
|
|
|
export const MAX_UPDATE_COUNT = 100
|
|
|
@@ -47,16 +48,19 @@ let getNow: () => number = Date.now
|
|
|
// timestamp can either be hi-res (relative to page 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 (inBrowser) {
|
|
|
+// All IE versions use low-res event timestamps, and have problematic clock
|
|
|
+// implementations (#9632)
|
|
|
+if (inBrowser && !isIE) {
|
|
|
const performance = window.performance
|
|
|
if (
|
|
|
performance &&
|
|
|
typeof performance.now === 'function' &&
|
|
|
- document.createEvent('Event').timeStamp <= performance.now()
|
|
|
+ getNow() > document.createEvent('Event').timeStamp
|
|
|
) {
|
|
|
- // if the event timestamp is bigger than the hi-res timestamp
|
|
|
- // (which is evaluated AFTER) it means the event is using a lo-res timestamp,
|
|
|
- // and we need to use the lo-res version for event listeners as well.
|
|
|
+ // if the event timestamp, although evaluated AFTER the Date.now(), is
|
|
|
+ // smaller than it, it means the event is using a hi-res timestamp,
|
|
|
+ // and we need to use the hi-res version for event listener timestamps as
|
|
|
+ // well.
|
|
|
getNow = () => performance.now()
|
|
|
}
|
|
|
}
|