From 8405d4f3f0bd01b4df91df1aef5464876f03571d Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 6 Apr 2026 14:17:33 +0000 Subject: [PATCH] Reduce window size for adjacent but never-focused feed pages Track whether each feed page has been focused at least once. For adjacent pages that are only prefetching (never viewed by the user), use windowSize=1 to minimize rendering overhead. Once a page has been focused, it keeps the default windowSize=9 for smooth swiping. https://claude.ai/code/session_01SJL2SqcPnJo7wbhku6SFt5 --- src/view/com/feeds/FeedPage.tsx | 7 +++++++ src/view/com/posts/PostFeed.tsx | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/view/com/feeds/FeedPage.tsx b/src/view/com/feeds/FeedPage.tsx index c86cd245b6..3b3733c145 100644 --- a/src/view/com/feeds/FeedPage.tsx +++ b/src/view/com/feeds/FeedPage.tsx @@ -75,6 +75,10 @@ export function FeedPage({ const feedFeedback = useFeedFeedback(feedInfo, hasSession) const scrollElRef = useRef(null) const [hasNew, setHasNew] = useState(false) + const [hasBeenFocused, setHasBeenFocused] = useState(isPageFocused) + if (isPageFocused && !hasBeenFocused) { + setHasBeenFocused(true) + } const setHomeBadge = useSetHomeBadge() const isVideoFeed = useMemo(() => { const isBskyVideoFeed = VIDEO_FEED_URIS.includes(feedInfo.uri) @@ -138,6 +142,8 @@ export function FeedPage({ }, [ax, scrollToTop, feed, queryClient]) const shouldPrefetch = IS_NATIVE && isPageAdjacent + const windowSize = + isPageAdjacent && !hasBeenFocused ? 1 : undefined const isDiscoverFeed = feedInfo.uri === DISCOVER_FEED_URI return ( diff --git a/src/view/com/posts/PostFeed.tsx b/src/view/com/posts/PostFeed.tsx index f813dc9358..1aa56455b2 100644 --- a/src/view/com/posts/PostFeed.tsx +++ b/src/view/com/posts/PostFeed.tsx @@ -203,6 +203,7 @@ let PostFeed = ({ savedFeedConfig, initialNumToRender: initialNumToRenderOverride, isVideoFeed = false, + windowSize: windowSizeOverride, }: { feed: FeedDescriptor feedParams?: FeedParams @@ -225,6 +226,7 @@ let PostFeed = ({ savedFeedConfig?: AppBskyActorDefs.SavedFeed initialNumToRender?: number isVideoFeed?: boolean + windowSize?: number lastFetchDate?: () => number }): React.ReactNode => { const ax = useAnalytics() @@ -1015,7 +1017,7 @@ let PostFeed = ({ desktopFixedHeightOffset ? desktopFixedHeightOffset : true } initialNumToRender={initialNumToRenderOverride ?? initialNumToRender} - windowSize={9} + windowSize={windowSizeOverride ?? 9} maxToRenderPerBatch={IS_IOS ? 5 : 1} updateCellsBatchingPeriod={40} onItemSeen={onItemSeen}