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
This commit is contained in:
Claude
2026-04-06 14:17:33 +00:00
parent 165dd5a779
commit 8405d4f3f0
2 changed files with 10 additions and 1 deletions
+7
View File
@@ -75,6 +75,10 @@ export function FeedPage({
const feedFeedback = useFeedFeedback(feedInfo, hasSession)
const scrollElRef = useRef<ListMethods>(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 (
<View
@@ -161,6 +167,7 @@ export function FeedPage({
headerOffset={headerOffset}
savedFeedConfig={savedFeedConfig}
isVideoFeed={isVideoFeed}
windowSize={windowSize}
/>
</FeedFeedbackProvider>
</MainScrollProvider>
+3 -1
View File
@@ -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}