mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-19 14:41:24 +08:00
feat: optimize minapp cache with LRU (#8160)
This commit is contained in:
parent
a6db53873a
commit
f0043b4be5
@ -11,6 +11,26 @@ import {
|
|||||||
import { MinAppType } from '@renderer/types'
|
import { MinAppType } from '@renderer/types'
|
||||||
import { useCallback } from 'react'
|
import { useCallback } from 'react'
|
||||||
|
|
||||||
|
const updateLRUCache = <T extends { id: string }>(apps: T[], app: T, limitation: number): T[] => {
|
||||||
|
const existingIndex = apps.findIndex((item) => item.id === app.id)
|
||||||
|
|
||||||
|
if (existingIndex !== -1) {
|
||||||
|
// 找到已存在的 app,将其移动到最前面
|
||||||
|
const updatedApps = [...apps]
|
||||||
|
updatedApps.splice(existingIndex, 1)
|
||||||
|
updatedApps.unshift(app)
|
||||||
|
return updatedApps
|
||||||
|
}
|
||||||
|
|
||||||
|
const updatedApps = [app, ...apps]
|
||||||
|
|
||||||
|
if (updatedApps.length > limitation) {
|
||||||
|
return updatedApps.slice(0, limitation)
|
||||||
|
}
|
||||||
|
|
||||||
|
return updatedApps
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Usage:
|
* Usage:
|
||||||
*
|
*
|
||||||
@ -34,21 +54,8 @@ export const useMinappPopup = () => {
|
|||||||
const openMinapp = useCallback(
|
const openMinapp = useCallback(
|
||||||
(app: MinAppType, keepAlive: boolean = false) => {
|
(app: MinAppType, keepAlive: boolean = false) => {
|
||||||
if (keepAlive) {
|
if (keepAlive) {
|
||||||
// 如果小程序已经打开,只切换显示
|
const updatedApps = updateLRUCache(openedKeepAliveMinapps, app, maxKeepAliveMinapps)
|
||||||
if (openedKeepAliveMinapps.some((item) => item.id === app.id)) {
|
dispatch(setOpenedKeepAliveMinapps(updatedApps))
|
||||||
dispatch(setCurrentMinappId(app.id))
|
|
||||||
dispatch(setMinappShow(true))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果缓存数量未达上限,添加到缓存列表
|
|
||||||
if (openedKeepAliveMinapps.length < maxKeepAliveMinapps) {
|
|
||||||
dispatch(setOpenedKeepAliveMinapps([app, ...openedKeepAliveMinapps]))
|
|
||||||
} else {
|
|
||||||
// 缓存数量达到上限,移除最后一个,添加新的
|
|
||||||
dispatch(setOpenedKeepAliveMinapps([app, ...openedKeepAliveMinapps.slice(0, maxKeepAliveMinapps - 1)]))
|
|
||||||
}
|
|
||||||
|
|
||||||
dispatch(setOpenedOneOffMinapp(null))
|
dispatch(setOpenedOneOffMinapp(null))
|
||||||
dispatch(setCurrentMinappId(app.id))
|
dispatch(setCurrentMinappId(app.id))
|
||||||
dispatch(setMinappShow(true))
|
dispatch(setMinappShow(true))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user