diff options
| author | Adam <[email protected]> | 2026-03-27 20:26:57 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-28 01:26:57 +0000 |
| commit | f736116967f5b57d89978e51961f2e78eedb443b (patch) | |
| tree | eac11218e8114d8d0f14c1b133b2c0594721f11c /packages/app/src/pages | |
| parent | 82fc493520925cb71323964bff6939e768e6d83a (diff) | |
| download | opencode-f736116967f5b57d89978e51961f2e78eedb443b.tar.gz opencode-f736116967f5b57d89978e51961f2e78eedb443b.zip | |
fix(app): more startup efficiency (#19454)
Diffstat (limited to 'packages/app/src/pages')
| -rw-r--r-- | packages/app/src/pages/session.tsx | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 11e6375b3..917de35b1 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -544,6 +544,8 @@ export default function Page() { let reviewFrame: number | undefined let refreshFrame: number | undefined let refreshTimer: number | undefined + let todoFrame: number | undefined + let todoTimer: number | undefined let diffFrame: number | undefined let diffTimer: number | undefined @@ -718,7 +720,6 @@ export default function Page() { if (!info) return true return Date.now() - info.at > SESSION_PREFETCH_TTL })() - const todos = untrack(() => sync.data.todo[id] !== undefined || globalSync.data.session_todo[id] !== undefined) untrack(() => { void sync.session.sync(id) }) @@ -730,7 +731,6 @@ export default function Page() { if (params.id !== id) return untrack(() => { if (stale) void sync.session.sync(id, { force: true }) - void sync.session.todo(id, todos ? { force: true } : undefined) }) }, 0) }) @@ -739,6 +739,41 @@ export default function Page() { createEffect( on( + () => { + const id = params.id + return [ + sdk.directory, + id, + id ? (sync.data.session_status[id]?.type ?? "idle") : "idle", + id ? composer.blocked() : false, + ] as const + }, + ([dir, id, status, blocked]) => { + if (todoFrame !== undefined) cancelAnimationFrame(todoFrame) + if (todoTimer !== undefined) window.clearTimeout(todoTimer) + todoFrame = undefined + todoTimer = undefined + if (!id) return + if (status === "idle" && !blocked) return + const cached = untrack(() => sync.data.todo[id] !== undefined || globalSync.data.session_todo[id] !== undefined) + + todoFrame = requestAnimationFrame(() => { + todoFrame = undefined + todoTimer = window.setTimeout(() => { + todoTimer = undefined + if (sdk.directory !== dir || params.id !== id) return + untrack(() => { + void sync.session.todo(id, cached ? { force: true } : undefined) + }) + }, 0) + }) + }, + { defer: true }, + ), + ) + + createEffect( + on( () => visibleUserMessages().at(-1)?.id, (lastId, prevLastId) => { if (lastId && prevLastId && lastId > prevLastId) { @@ -1658,6 +1693,8 @@ export default function Page() { if (reviewFrame !== undefined) cancelAnimationFrame(reviewFrame) if (refreshFrame !== undefined) cancelAnimationFrame(refreshFrame) if (refreshTimer !== undefined) window.clearTimeout(refreshTimer) + if (todoFrame !== undefined) cancelAnimationFrame(todoFrame) + if (todoTimer !== undefined) window.clearTimeout(todoTimer) if (diffFrame !== undefined) cancelAnimationFrame(diffFrame) if (diffTimer !== undefined) window.clearTimeout(diffTimer) if (scrollStateFrame !== undefined) cancelAnimationFrame(scrollStateFrame) |
