Merge pull request #823 from Jasonzhu1207/main

fix(perf): prevent memory growth in chat and export flows
This commit is contained in:
cc
2026-04-23 18:41:04 +08:00
committed by GitHub
6 changed files with 243 additions and 70 deletions

View File

@@ -5,6 +5,21 @@ import './Avatar.scss'
// 全局缓存已成功加载过的头像 URL用于控制后续是否显示动画
const loadedAvatarCache = new Set<string>()
const MAX_LOADED_AVATAR_CACHE_SIZE = 3000
const rememberLoadedAvatar = (src: string): void => {
if (!src) return
if (loadedAvatarCache.has(src)) {
loadedAvatarCache.delete(src)
}
loadedAvatarCache.add(src)
while (loadedAvatarCache.size > MAX_LOADED_AVATAR_CACHE_SIZE) {
const oldest = loadedAvatarCache.values().next().value as string | undefined
if (!oldest) break
loadedAvatarCache.delete(oldest)
}
}
interface AvatarProps {
src?: string
@@ -123,7 +138,7 @@ export const Avatar = React.memo(function Avatar({
onLoad={() => {
if (src) {
avatarLoadQueue.clearFailed(src)
loadedAvatarCache.add(src)
rememberLoadedAvatar(src)
}
setImageLoaded(true)
setImageError(false)