@esmj/task
Version:
Tiny task management library which divide long task. Improve core web vitals and browser responsiveness.
2 lines (1 loc) • 977 B
JavaScript
var n={},i={autoEnable:!0,autoShareContext:!1},a=45,l=0,f=16;function c(){return typeof requestAnimationFrame>"u"?o(f):new Promise(e=>{requestAnimationFrame(()=>{o(0).then(e)})})}function o(e){let t=u();return typeof t.scheduler?.yield=="function"&&e===void 0?(r(),t.scheduler.yield()):new Promise(d=>{setTimeout(()=>{r(),d(void 0)},e??l)})}async function m(){if(!(!i.autoEnable||n.__esmjTaskYieldTime__!==void 0&&!s(n.__esmjTaskYieldTime__)))return o()}function _(e={}){i={...i,...e},i.autoShareContext?n=u():n={}}function g(){n.__esmjTaskYieldTime__=void 0}function r(){n.__esmjTaskYieldTime__=performance.now()+a}function u(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}function s(e){let t=performance.now();return typeof navigator<"u"&&navigator?.scheduling?.isInputPending?.()||t>e}export{m as autoYield,g as autoYieldReset,r as autoYieldStartPoint,o as forceYield,c as nextFrameYield,_ as setConfig};