Page MenuHomeWickedGov Phorge

mediawiki.requestIdleCallback.js
No OneTemporary

Size
1 KB
Referenced Files
None
Subscribers
None

mediawiki.requestIdleCallback.js

/* global mw */
mw.requestIdleCallbackInternal = function ( callback ) {
setTimeout( function () {
var start = mw.now();
callback( {
didTimeout: false,
timeRemaining: function () {
// Hard code a target maximum busy time of 50 milliseconds
return Math.max( 0, 50 - ( mw.now() - start ) );
}
} );
}, 1 );
};
/**
* Schedule a deferred task to run in the background.
*
* This allows code to perform tasks in the main thread without impacting
* time-critical operations such as animations and response to input events.
*
* Basic logic is as follows:
*
* - User input event should be acknowledged within 100ms per [RAIL][].
* - Idle work should be grouped in blocks of upto 50ms so that enough time
* remains for the event handler to execute and any rendering to take place.
* - Whenever a native event happens (e.g. user input), the deadline for any
* running idle callback drops to 0.
* - As long as the deadline is non-zero, other callbacks pending may be
* executed in the same idle period.
*
* See also:
*
* - <https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback>
* - <https://w3c.github.io/requestidlecallback/>
* - <https://developers.google.com/web/updates/2015/08/using-requestidlecallback>
*
* [RAIL]: https://developers.google.com/web/fundamentals/performance/rail
*
* @memberof mw
* @method
* @param {Function} callback
* @param {Object} [options]
* @param {number} [options.timeout] If set, the callback will be scheduled for
* immediate execution after this amount of time (in milliseconds) if it didn't run
* by that time.
*/
mw.requestIdleCallback = window.requestIdleCallback ?
// Bind because it throws TypeError if context is not window
window.requestIdleCallback.bind( window ) :
mw.requestIdleCallbackInternal;
// Note: Polyfill was previously disabled due to
// https://bugs.chromium.org/p/chromium/issues/detail?id=647870
// See also <http://codepen.io/Krinkle/full/XNGEvv>

File Metadata

Mime Type
text/plain
Expires
Sat, Oct 3, 14:09 (9 h, 34 m ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
47/10/8782520a15a0a5efc45ac28556de
Default Alt Text
mediawiki.requestIdleCallback.js (1 KB)

Event Timeline