perf: prefetch ai pages and soften route loading
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
type IdleCallbackHandle = number;
|
||||
|
||||
type IdleCallbackOptions = {
|
||||
timeout?: number;
|
||||
};
|
||||
|
||||
type WindowWithIdleCallback = Window & {
|
||||
requestIdleCallback?: (
|
||||
callback: () => void,
|
||||
options?: IdleCallbackOptions,
|
||||
) => IdleCallbackHandle;
|
||||
};
|
||||
|
||||
let prefetched = false;
|
||||
|
||||
const prefetchTasks = [
|
||||
() => import('#/views/ai-platform/agent/index.vue'),
|
||||
() => import('#/views/_core/agent-chat/index.vue'),
|
||||
() => import('#/views/ai-platform/workflow/index.vue'),
|
||||
() => import('#/views/ai-platform/workflow-runs/index.vue'),
|
||||
() => import('#/views/ai-platform/model/index.vue'),
|
||||
() => import('#/views/ai-platform/knowledge/index.vue'),
|
||||
];
|
||||
|
||||
function scheduleIdle(callback: () => void) {
|
||||
const browserWindow = window as WindowWithIdleCallback;
|
||||
|
||||
if (browserWindow.requestIdleCallback) {
|
||||
browserWindow.requestIdleCallback(callback, { timeout: 3000 });
|
||||
return;
|
||||
}
|
||||
|
||||
window.setTimeout(callback, 1200);
|
||||
}
|
||||
|
||||
function prefetchAiPlatformPages() {
|
||||
if (prefetched || typeof window === 'undefined') {
|
||||
return;
|
||||
}
|
||||
|
||||
prefetched = true;
|
||||
scheduleIdle(() => {
|
||||
void Promise.allSettled(prefetchTasks.map((task) => task()));
|
||||
});
|
||||
}
|
||||
|
||||
export { prefetchAiPlatformPages };
|
||||
Reference in New Issue
Block a user