perf(app): don't keep parts in memory

This commit is contained in:
adamelmore
2026-01-27 06:53:16 -06:00
parent ad624f65ee
commit 3e420bf8e1

View File

@@ -579,6 +579,41 @@ function createGlobalSync() {
if (!existing) return if (!existing) return
const [store, setStore] = existing const [store, setStore] = existing
const cleanupSessionCaches = (sessionID: string) => {
if (!sessionID) return
const hasAny =
store.message[sessionID] !== undefined ||
store.session_diff[sessionID] !== undefined ||
store.todo[sessionID] !== undefined ||
store.permission[sessionID] !== undefined ||
store.question[sessionID] !== undefined ||
store.session_status[sessionID] !== undefined
if (!hasAny) return
setStore(
produce((draft) => {
const messages = draft.message[sessionID]
if (messages) {
for (const message of messages) {
const id = message?.id
if (!id) continue
delete draft.part[id]
}
}
delete draft.message[sessionID]
delete draft.session_diff[sessionID]
delete draft.todo[sessionID]
delete draft.permission[sessionID]
delete draft.question[sessionID]
delete draft.session_status[sessionID]
}),
)
}
switch (event.type) { switch (event.type) {
case "server.instance.disposed": { case "server.instance.disposed": {
if (globalStore.reload) { if (globalStore.reload) {
@@ -616,6 +651,9 @@ function createGlobalSync() {
}), }),
) )
} }
cleanupSessionCaches(info.id)
if (info.parentID) break if (info.parentID) break
setStore("sessionTotal", (value) => Math.max(0, value - 1)) setStore("sessionTotal", (value) => Math.max(0, value - 1))
break break
@@ -631,7 +669,8 @@ function createGlobalSync() {
break break
} }
case "session.deleted": { case "session.deleted": {
const result = Binary.search(store.session, event.properties.info.id, (s) => s.id) const sessionID = event.properties.info.id
const result = Binary.search(store.session, sessionID, (s) => s.id)
if (result.found) { if (result.found) {
setStore( setStore(
"session", "session",
@@ -640,6 +679,9 @@ function createGlobalSync() {
}), }),
) )
} }
cleanupSessionCaches(sessionID)
if (event.properties.info.parentID) break if (event.properties.info.parentID) break
setStore("sessionTotal", (value) => Math.max(0, value - 1)) setStore("sessionTotal", (value) => Math.max(0, value - 1))
break break
@@ -675,18 +717,22 @@ function createGlobalSync() {
break break
} }
case "message.removed": { case "message.removed": {
const messages = store.message[event.properties.sessionID] const sessionID = event.properties.sessionID
if (!messages) break const messageID = event.properties.messageID
const result = Binary.search(messages, event.properties.messageID, (m) => m.id)
if (result.found) { setStore(
setStore( produce((draft) => {
"message", const messages = draft.message[sessionID]
event.properties.sessionID, if (messages) {
produce((draft) => { const result = Binary.search(messages, messageID, (m) => m.id)
draft.splice(result.index, 1) if (result.found) {
}), messages.splice(result.index, 1)
) }
} }
delete draft.part[messageID]
}),
)
break break
} }
case "message.part.updated": { case "message.part.updated": {