41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
// 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)
|
||
}
|
||
})
|
||
}
|