diff --git a/browser.js b/browser.js index ac1eef5..731c29b 100644 --- a/browser.js +++ b/browser.js @@ -8,6 +8,7 @@ var process = module.exports = {}; var cachedSetTimeout; var cachedClearTimeout; +var cachedQueueMicrotask function defaultSetTimeout() { throw new Error('setTimeout has not been defined'); @@ -15,6 +16,20 @@ function defaultSetTimeout() { function defaultClearTimeout () { throw new Error('clearTimeout has not been defined'); } +function detectQueueMicrotask () { + if (cachedQueueMicrotask) { + return true; + } + try { + if (cachedQueueMicrotask !== queueMicrotask) { + cachedQueueMicrotask = queueMicrotask; + return true; + } + return false; + } catch (e) { + return false; + } +} (function () { try { if (typeof setTimeout === 'function') { @@ -34,6 +49,7 @@ function defaultClearTimeout () { } catch (e) { cachedClearTimeout = defaultClearTimeout; } + detectQueueMicrotask(); } ()) function runTimeout(fun) { if (cachedSetTimeout === setTimeout) { @@ -138,8 +154,13 @@ process.nextTick = function (fun) { args[i - 1] = arguments[i]; } } + queue.push(new Item(fun, args)); if (queue.length === 1 && !draining) { + if (detectQueueMicrotask()) { + return cachedQueueMicrotask(drainQueue); + } + runTimeout(drainQueue); } };