memoize each module individually (#8111)

This commit is contained in:
Samuel Newman
2025-04-04 00:02:20 +03:00
committed by GitHub
parent faa5f40c53
commit 898065d0a2
+66 -70
View File
@@ -325,29 +325,16 @@ export function Explore({
fetchNextPageFeedPreviews, fetchNextPageFeedPreviews,
]) ])
const items = useMemo<ExploreScreenItems[]>(() => { const topBorder = useMemo(
() => ({type: 'topBorder', key: 'top-border'} as const),
[],
)
const trendingTopicsModule = useMemo(
() => ({type: 'trendingTopics', key: 'trending-topics'} as const),
[],
)
const suggestedFollowsModule = useMemo(() => {
const i: ExploreScreenItems[] = [] const i: ExploreScreenItems[] = []
const addTopBorder = () => {
i.push({type: 'topBorder', key: 'top-border'})
}
const addTrendingTopicsModule = () => {
i.push({
type: 'trendingTopics',
key: `trending-topics`,
})
// temp - disable trending videos
// if (isNative) {
// i.push({
// type: 'trendingVideos',
// key: `trending-videos`,
// })
// }
}
const addSuggestedFollowsModule = () => {
i.push({ i.push({
type: 'tabbedHeader', type: 'tabbedHeader',
key: 'suggested-accounts-header', key: 'suggested-accounts-header',
@@ -414,9 +401,19 @@ export function Explore({
i.push({type: 'profilePlaceholder', key: 'profilePlaceholder'}) i.push({type: 'profilePlaceholder', key: 'profilePlaceholder'})
} }
} }
} return i
}, [
const addSuggestedFeedsModule = () => { profiles,
_,
canShowSuggestedProfiles,
hasNextProfilesPage,
isLoadingMoreProfiles,
moderationOpts,
onLoadMoreProfiles,
profilesError,
])
const suggestedFeedsModule = useMemo(() => {
const i: ExploreScreenItems[] = []
i.push({ i.push({
type: 'header', type: 'header',
key: 'suggested-feeds-header', key: 'suggested-feeds-header',
@@ -505,9 +502,20 @@ export function Explore({
i.push({type: 'feedPlaceholder', key: 'feedPlaceholder'}) i.push({type: 'feedPlaceholder', key: 'feedPlaceholder'})
} }
} }
} return i
}, [
const addSuggestedStarterPacksModule = () => { feeds,
_,
feedsError,
hasNextFeedsPage,
hasPressedLoadMoreFeeds,
isLoadingMoreFeeds,
onLoadMoreFeeds,
preferences,
preferencesError,
])
const suggestedStarterPacksModule = useMemo(() => {
const i: ExploreScreenItems[] = []
i.push({ i.push({
type: 'header', type: 'header',
key: 'suggested-starterPacks-header', key: 'suggested-starterPacks-header',
@@ -516,7 +524,7 @@ export function Explore({
}) })
if (isLoadingSuggestedSPs) { if (isLoadingSuggestedSPs) {
Array.from({length: 3}).forEach((_, index) => Array.from({length: 3}).forEach((__, index) =>
i.push({ i.push({
type: 'starterPackSkeleton', type: 'starterPackSkeleton',
key: `starterPackSkeleton-${index}`, key: `starterPackSkeleton-${index}`,
@@ -534,9 +542,10 @@ export function Explore({
}) })
}) })
} }
} return i
}, [suggestedSPs, _, isLoadingSuggestedSPs, suggestedSPsError])
const addFeedPreviews = () => { const feedPreviewsModule = useMemo(() => {
const i: ExploreScreenItems[] = []
i.push(...feedPreviewSlices) i.push(...feedPreviewSlices)
if (isFetchingNextPageFeedPreviews) { if (isFetchingNextPageFeedPreviews) {
i.push({ i.push({
@@ -544,53 +553,40 @@ export function Explore({
key: 'preview-loading-more', key: 'preview-loading-more',
}) })
} }
} return i
}, [feedPreviewSlices, isFetchingNextPageFeedPreviews])
const isNewUser = guide?.guide === 'follow-10' && !guide.isComplete
const items = useMemo<ExploreScreenItems[]>(() => {
const i: ExploreScreenItems[] = []
// Dynamic module ordering // Dynamic module ordering
addTopBorder() i.push(topBorder)
if (isNewUser) {
if (guide?.guide === 'follow-10' && !guide.isComplete) { i.push(...suggestedFollowsModule)
addSuggestedFollowsModule() i.push(...suggestedStarterPacksModule)
addSuggestedStarterPacksModule() i.push(trendingTopicsModule)
addTrendingTopicsModule()
} else { } else {
addTrendingTopicsModule() i.push(trendingTopicsModule)
addSuggestedFollowsModule() i.push(...suggestedFollowsModule)
addSuggestedStarterPacksModule() i.push(...suggestedStarterPacksModule)
} }
if (gate('explore_show_suggested_feeds')) { if (gate('explore_show_suggested_feeds')) {
addSuggestedFeedsModule() i.push(...suggestedFeedsModule)
} }
i.push(...feedPreviewsModule)
addFeedPreviews()
return i return i
}, [ }, [
_, topBorder,
profiles, isNewUser,
feeds, suggestedFollowsModule,
preferences, suggestedStarterPacksModule,
onLoadMoreFeeds, suggestedFeedsModule,
onLoadMoreProfiles, trendingTopicsModule,
isLoadingMoreProfiles, feedPreviewsModule,
isLoadingMoreFeeds,
profilesError,
feedsError,
preferencesError,
hasNextProfilesPage,
hasNextFeedsPage,
guide,
gate, gate,
moderationOpts,
hasPressedLoadMoreFeeds,
suggestedSPs,
isLoadingSuggestedSPs,
suggestedSPsError,
feedPreviewSlices,
isFetchingNextPageFeedPreviews,
canShowSuggestedProfiles,
]) ])
const renderItem = useCallback( const renderItem = useCallback(
@@ -709,7 +705,7 @@ export function Explore({
case 'profilePlaceholder': { case 'profilePlaceholder': {
return ( return (
<> <>
{Array.from({length: 3}).map((_, index) => ( {Array.from({length: 3}).map((__, i) => (
<View <View
style={[ style={[
a.px_lg, a.px_lg,
@@ -717,7 +713,7 @@ export function Explore({
a.border_t, a.border_t,
t.atoms.border_contrast_low, t.atoms.border_contrast_low,
]} ]}
key={index}> key={i}>
<ProfileCard.Outer> <ProfileCard.Outer>
<ProfileCard.Header> <ProfileCard.Header>
<ProfileCard.AvatarPlaceholder /> <ProfileCard.AvatarPlaceholder />