From f5f60b048c9901a309121f4680d464fff06a6089 Mon Sep 17 00:00:00 2001 From: pa Date: Tue, 28 Oct 2025 10:57:22 +0900 Subject: [PATCH] reduce favorite tab memory usage --- src/stores/favorite.js | 41 ++++++++++++++++++++++------------------- src/stores/friend.js | 3 +-- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/stores/favorite.js b/src/stores/favorite.js index ef1531b4..22053f30 100644 --- a/src/stores/favorite.js +++ b/src/stores/favorite.js @@ -32,11 +32,11 @@ export const useFavoriteStore = defineStore('Favorite', () => { favoriteAvatars_: [] }); - let cachedFavorites = new Map(); + const cachedFavorites = ref(new Map()); const currentFavoriteTab = ref('friend'); - const cachedFavoriteGroups = ref(new Map()); + const cachedFavoriteGroups = ref({}); const cachedFavoriteGroupsByTypeName = computed(() => { const group = {}; @@ -185,9 +185,9 @@ export const useFavoriteStore = defineStore('Favorite', () => { () => watchState.isLoggedIn, (isLoggedIn) => { friendStore.localFavoriteFriends.clear(); - cachedFavorites.clear(); + cachedFavorites.value.clear(); cachedFavoritesByObjectId.value.clear(); - cachedFavoriteGroups.value.clear(); + cachedFavoriteGroups.value = {}; favoriteFriendGroups.value = []; favoriteWorldGroups.value = []; favoriteAvatarGroups.value = []; @@ -309,7 +309,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { function handleFavoriteGroupClear(args) { const key = `${args.params.type}:${args.params.group}`; - for (const ref of cachedFavorites.values()) { + for (const ref of cachedFavorites.value.values()) { if (ref.$isDeleted || ref.$groupKey !== key) { continue; } @@ -346,7 +346,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { function expireFavorites() { friendStore.localFavoriteFriends.clear(); - cachedFavorites.clear(); + cachedFavorites.value.clear(); cachedFavoritesByObjectId.value.clear(); state.favoriteObjects.clear(); state.favoriteFriends_ = []; @@ -412,7 +412,6 @@ export const useFavoriteStore = defineStore('Favorite', () => { name: '', $selected: false }; - state.favoriteObjects.set(objectId, ctx); if (type === 'friend') { ref = userStore.cachedUsers.get(objectId); if (typeof ref === 'undefined') { @@ -437,6 +436,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { ctx.name = ref.name; } } + state.favoriteObjects.set(objectId, ctx); isTypeChanged = true; } else { if (ctx.type !== type) { @@ -575,13 +575,14 @@ export const useFavoriteStore = defineStore('Favorite', () => { } function expireFavoriteGroups() { - for (const ref of cachedFavoriteGroups.value.values()) { - ref.$isExpired = true; + for (const key in cachedFavoriteGroups.value) { + cachedFavoriteGroups.value[key].$isExpired = true; } } function deleteExpiredFavoriteGroups() { - for (const ref of cachedFavoriteGroups.value.values()) { + for (const key in cachedFavoriteGroups.value) { + const ref = cachedFavoriteGroups.value[key]; if (ref.$isDeleted || ref.$isExpired === false) { continue; } @@ -645,7 +646,8 @@ export const useFavoriteStore = defineStore('Favorite', () => { }; const assigns = new Set(); // assign the same name first - for (ref of cachedFavoriteGroups.value.values()) { + for (const key in cachedFavoriteGroups.value) { + const ref = cachedFavoriteGroups.value[key]; if (ref.$isDeleted) { continue; } @@ -666,7 +668,8 @@ export const useFavoriteStore = defineStore('Favorite', () => { } } - for (ref of cachedFavoriteGroups.value.values()) { + for (const key in cachedFavoriteGroups.value) { + const ref = cachedFavoriteGroups.value[key]; if (ref.$isDeleted || assigns.has(ref.id)) { continue; } @@ -687,7 +690,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { } // update favorites - for (ref of cachedFavorites.values()) { + for (ref of cachedFavorites.value.values()) { if (ref.$isDeleted) { continue; } @@ -755,7 +758,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { * @returns {any} */ function applyFavoriteGroup(json) { - let ref = cachedFavoriteGroups.value.get(json.id); + let ref = cachedFavoriteGroups.value[json.id]; if (typeof ref === 'undefined') { ref = { id: '', @@ -772,7 +775,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { // ...json }; - cachedFavoriteGroups.value.set(ref.id, ref); + cachedFavoriteGroups.value[ref.id] = ref; } else { Object.assign(ref, json); ref.$isExpired = false; @@ -786,7 +789,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { * @returns {any} */ function applyFavoriteCached(json) { - let ref = cachedFavorites.get(json.id); + let ref = cachedFavorites.value.get(json.id); if (typeof ref === 'undefined') { ref = { id: '', @@ -800,7 +803,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { // ...json }; - cachedFavorites.set(ref.id, ref); + cachedFavorites.value.set(ref.id, ref); cachedFavoritesByObjectId.value.set(ref.favoriteId, ref); if ( ref.type === 'friend' && @@ -831,7 +834,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { * */ function deleteExpiredFavorites() { - for (const ref of cachedFavorites.values()) { + for (const ref of cachedFavorites.value.values()) { if (ref.$isDeleted || ref.$isExpired === false) { continue; } @@ -869,7 +872,7 @@ export const useFavoriteStore = defineStore('Favorite', () => { avatar: [0, favoriteRequest.getFavoriteAvatars] }; const tags = []; - for (const ref of cachedFavorites.values()) { + for (const ref of cachedFavorites.value.values()) { if (ref.$isDeleted) { continue; } diff --git a/src/stores/friend.js b/src/stores/friend.js index 6e6ec19e..70a9515f 100644 --- a/src/stores/friend.js +++ b/src/stores/friend.js @@ -241,9 +241,8 @@ export const useFriendStore = defineStore('Friend', () => { function updateLocalFavoriteFriends() { const favoriteStore = useFavoriteStore(); - const { cachedFavorites } = favoriteStore; localFavoriteFriends.value.clear(); - for (const ref of cachedFavorites.values()) { + for (const ref of favoriteStore.cachedFavorites.values()) { if ( !ref.$isDeleted && ref.type === 'friend' &&