Prefetch adjacent Home pages (#6904)

This commit is contained in:
dan
2024-12-03 01:11:11 +00:00
committed by Dan Abramov
parent 4e8b9c1da6
commit 74c692a5a1
3 changed files with 10 additions and 5 deletions
+4 -2
View File
@@ -32,6 +32,7 @@ const POLL_FREQ = 60e3 // 60sec
export function FeedPage({ export function FeedPage({
testID, testID,
isPageFocused, isPageFocused,
isPageAdjacent,
feed, feed,
feedParams, feedParams,
renderEmptyState, renderEmptyState,
@@ -42,6 +43,7 @@ export function FeedPage({
feed: FeedDescriptor feed: FeedDescriptor
feedParams?: FeedParams feedParams?: FeedParams
isPageFocused: boolean isPageFocused: boolean
isPageAdjacent: boolean
renderEmptyState: () => JSX.Element renderEmptyState: () => JSX.Element
renderEndOfFeed?: () => JSX.Element renderEndOfFeed?: () => JSX.Element
savedFeedConfig?: AppBskyActorDefs.SavedFeed savedFeedConfig?: AppBskyActorDefs.SavedFeed
@@ -111,11 +113,11 @@ export function FeedPage({
<FeedFeedbackProvider value={feedFeedback}> <FeedFeedbackProvider value={feedFeedback}>
<Feed <Feed
testID={testID ? `${testID}-feed` : undefined} testID={testID ? `${testID}-feed` : undefined}
enabled={isPageFocused} enabled={isPageFocused || isPageAdjacent}
feed={feed} feed={feed}
feedParams={feedParams} feedParams={feedParams}
pollInterval={POLL_FREQ} pollInterval={POLL_FREQ}
disablePoll={hasNew} disablePoll={hasNew || !isPageFocused}
scrollElRef={scrollElRef} scrollElRef={scrollElRef}
onScrolledDownChange={setIsScrolledDown} onScrolledDownChange={setIsScrolledDown}
onHasNew={setHasNew} onHasNew={setHasNew}
+2 -2
View File
@@ -216,7 +216,7 @@ let Feed = ({
checkForNewRef.current = checkForNew checkForNewRef.current = checkForNew
}, [checkForNew]) }, [checkForNew])
React.useEffect(() => { React.useEffect(() => {
if (enabled) { if (enabled && !disablePoll) {
const timeSinceFirstLoad = Date.now() - lastFetchRef.current const timeSinceFirstLoad = Date.now() - lastFetchRef.current
// DISABLED need to check if this is causing random feed refreshes -prf // DISABLED need to check if this is causing random feed refreshes -prf
/*if (timeSinceFirstLoad > REFRESH_AFTER) { /*if (timeSinceFirstLoad > REFRESH_AFTER) {
@@ -231,7 +231,7 @@ let Feed = ({
checkForNewRef.current() checkForNewRef.current()
} }
} }
}, [enabled, feed, queryClient, scrollElRef]) }, [enabled, disablePoll, feed, queryClient, scrollElRef])
React.useEffect(() => { React.useEffect(() => {
let cleanup1: () => void | undefined, cleanup2: () => void | undefined let cleanup1: () => void | undefined, cleanup2: () => void | undefined
const subscription = AppState.addEventListener('change', nextAppState => { const subscription = AppState.addEventListener('change', nextAppState => {
+4 -1
View File
@@ -233,7 +233,7 @@ function HomeScreenReady({
onPageScrollStateChanged={onPageScrollStateChanged} onPageScrollStateChanged={onPageScrollStateChanged}
renderTabBar={renderTabBar}> renderTabBar={renderTabBar}>
{pinnedFeedInfos.length ? ( {pinnedFeedInfos.length ? (
pinnedFeedInfos.map(feedInfo => { pinnedFeedInfos.map((feedInfo, index) => {
const feed = feedInfo.feedDescriptor const feed = feedInfo.feedDescriptor
if (feed === 'following') { if (feed === 'following') {
return ( return (
@@ -241,6 +241,7 @@ function HomeScreenReady({
key={feed} key={feed}
testID="followingFeedPage" testID="followingFeedPage"
isPageFocused={selectedFeed === feed} isPageFocused={selectedFeed === feed}
isPageAdjacent={Math.abs(selectedIndex - index) === 1}
feed={feed} feed={feed}
feedParams={homeFeedParams} feedParams={homeFeedParams}
renderEmptyState={renderFollowingEmptyState} renderEmptyState={renderFollowingEmptyState}
@@ -254,6 +255,7 @@ function HomeScreenReady({
key={feed} key={feed}
testID="customFeedPage" testID="customFeedPage"
isPageFocused={selectedFeed === feed} isPageFocused={selectedFeed === feed}
isPageAdjacent={Math.abs(selectedIndex - index) === 1}
feed={feed} feed={feed}
renderEmptyState={renderCustomFeedEmptyState} renderEmptyState={renderCustomFeedEmptyState}
savedFeedConfig={savedFeedConfig} savedFeedConfig={savedFeedConfig}
@@ -273,6 +275,7 @@ function HomeScreenReady({
<FeedPage <FeedPage
testID="customFeedPage" testID="customFeedPage"
isPageFocused isPageFocused
isPageAdjacent={false}
feed={`feedgen|${PROD_DEFAULT_FEED('whats-hot')}`} feed={`feedgen|${PROD_DEFAULT_FEED('whats-hot')}`}
renderEmptyState={renderCustomFeedEmptyState} renderEmptyState={renderCustomFeedEmptyState}
/> />