// frontend/utils/preloadApi/scheduler.js // 调度器:启动期预热 + idle 预拉 // 依赖 core.js 的 run() import { run } from './core' // App 端 fallback:没有 requestIdleCallback,用 setTimeout const idle = typeof requestIdleCallback === 'function' ? requestIdleCallback : (cb) => setTimeout(() => cb({ didTimeout: false, timeRemaining: () => 50 }), 0) /** * 启动期预热 * @param {Array} startupList - config.startup 数组 */ export function warmStartup(startupList) { if (!startupList || !Array.isArray(startupList)) return console.log('[preload] warmStartup:', startupList.length, 'keys') for (const entry of startupList) { // fire-and-forget:不 await,并发由 core 内部 semaphore 控制 run(entry.key, entry.params) } } /** * idle 预拉(幂等:run 内部处理去重和缓存命中) * @param {Array} idleList - config.idle 数组 */ export function warmIdle(idleList) { if (!idleList || !Array.isArray(idleList)) return idle(() => { console.log('[preload] warmIdle:', idleList.length, 'keys') for (const entry of idleList) { run(entry.key, entry.params) } }) }