perf(home): stop popular threads rerenders after load

This commit is contained in:
Tommaso Casaburi
2026-04-19 15:01:27 +07:00
parent 508fffe5d6
commit 4b06ac8c9a
7 changed files with 249 additions and 17 deletions
+11 -2
View File
@@ -58,6 +58,10 @@ function shuffleBoardAddresses(boardAddresses: string[]): string[] {
return shuffledBoardAddresses;
}
function getPopularPostsInputKey(communityAddresses: string[]): string {
return [...communityAddresses].sort().join(',');
}
function getPopularPostsCacheEntry(inputKey: string, communityAddresses: string[]): PopularPostsCacheEntry {
const cachedEntry = popularPostsCacheByInputKey.get(inputKey);
if (cachedEntry) {
@@ -73,6 +77,11 @@ function getPopularPostsCacheEntry(inputKey: string, communityAddresses: string[
return cacheEntry;
}
export function getRevealedPopularPosts(communityAddresses: string[]): Comment[] | undefined {
const cacheEntry = popularPostsCacheByInputKey.get(getPopularPostsInputKey(communityAddresses));
return cacheEntry?.revealed ? cacheEntry.posts : undefined;
}
export function clearPopularPostsCacheForTest() {
popularPostsCacheByInputKey.clear();
}
@@ -86,10 +95,10 @@ export function clearPopularPostsCacheForTest() {
* the board filter, so threads never disappear during background loads.
*/
const usePopularPosts = (communities: Array<Community | undefined>, communityAddresses: string[]) => {
const inputKey = [...communityAddresses].sort().join(',');
const inputKey = getPopularPostsInputKey(communityAddresses);
const cacheEntry = getPopularPostsCacheEntry(inputKey, communityAddresses);
const currentTime = useCurrentTime(cacheEntry.revealed ? 300 : 5);
const currentTime = useCurrentTime(cacheEntry.revealed ? false : 5);
const nowSeconds = Math.floor(currentTime);
const loadingStartTimestamps = useCommunitiesLoadingStartTimestamps(communityAddresses);