[Experiment] Turn off interval polling for Discover (#3431)

* Include feed URL in feed events

* [Experiment] Turn off polling interval for Discover
This commit is contained in:
dan 2024-04-08 17:21:44 +01:00 committed by GitHub
parent 1150007d37
commit 8188f61e7d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 65 additions and 45 deletions

View file

@ -45,10 +45,12 @@ export type LogEvents = {
'onboarding:moderation:nextPressed': {} 'onboarding:moderation:nextPressed': {}
'onboarding:finished:nextPressed': {} 'onboarding:finished:nextPressed': {}
'feed:endReached': { 'feed:endReached': {
feedUrl: string
feedType: string feedType: string
itemCount: number itemCount: number
} }
'feed:refresh': { 'feed:refresh': {
feedUrl: string
feedType: string feedType: string
reason: 'pull-to-refresh' | 'soft-reset' | 'load-latest' reason: 'pull-to-refresh' | 'soft-reset' | 'load-latest'
} }

View file

@ -1,28 +1,29 @@
import React from 'react' import React from 'react'
import {useNavigation} from '@react-navigation/native' import {useWindowDimensions, View} from 'react-native'
import {useAnalytics} from 'lib/analytics/analytics'
import {useQueryClient} from '@tanstack/react-query'
import {RQKEY as FEED_RQKEY} from '#/state/queries/post-feed'
import {MainScrollProvider} from '../util/MainScrollProvider'
import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
import {useSetMinimalShellMode} from '#/state/shell'
import {FeedDescriptor, FeedParams} from '#/state/queries/post-feed'
import {ComposeIcon2} from 'lib/icons'
import {s} from 'lib/styles'
import {View, useWindowDimensions} from 'react-native'
import {ListMethods} from '../util/List'
import {Feed} from '../posts/Feed'
import {FAB} from '../util/fab/FAB'
import {LoadLatestBtn} from '../util/load-latest/LoadLatestBtn'
import {msg} from '@lingui/macro' import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react' import {useLingui} from '@lingui/react'
import {useSession} from '#/state/session' import {useNavigation} from '@react-navigation/native'
import {useComposerControls} from '#/state/shell/composer' import {useQueryClient} from '@tanstack/react-query'
import {listenSoftReset} from '#/state/events'
import {truncateAndInvalidate} from '#/state/queries/util' import {getRootNavigation, getTabState, TabState} from '#/lib/routes/helpers'
import {TabState, getTabState, getRootNavigation} from '#/lib/routes/helpers' import {logEvent, useGate} from '#/lib/statsig/statsig'
import {isNative} from '#/platform/detection' import {isNative} from '#/platform/detection'
import {logEvent} from '#/lib/statsig/statsig' import {listenSoftReset} from '#/state/events'
import {RQKEY as FEED_RQKEY} from '#/state/queries/post-feed'
import {FeedDescriptor, FeedParams} from '#/state/queries/post-feed'
import {truncateAndInvalidate} from '#/state/queries/util'
import {useSession} from '#/state/session'
import {useSetMinimalShellMode} from '#/state/shell'
import {useComposerControls} from '#/state/shell/composer'
import {useAnalytics} from 'lib/analytics/analytics'
import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
import {ComposeIcon2} from 'lib/icons'
import {s} from 'lib/styles'
import {Feed} from '../posts/Feed'
import {FAB} from '../util/fab/FAB'
import {ListMethods} from '../util/List'
import {LoadLatestBtn} from '../util/load-latest/LoadLatestBtn'
import {MainScrollProvider} from '../util/MainScrollProvider'
const POLL_FREQ = 60e3 // 60sec const POLL_FREQ = 60e3 // 60sec
@ -71,6 +72,7 @@ export function FeedPage({
setHasNew(false) setHasNew(false)
logEvent('feed:refresh', { logEvent('feed:refresh', {
feedType: feed.split('|')[0], feedType: feed.split('|')[0],
feedUrl: feed,
reason: 'soft-reset', reason: 'soft-reset',
}) })
} }
@ -96,10 +98,22 @@ export function FeedPage({
setHasNew(false) setHasNew(false)
logEvent('feed:refresh', { logEvent('feed:refresh', {
feedType: feed.split('|')[0], feedType: feed.split('|')[0],
feedUrl: feed,
reason: 'load-latest', reason: 'load-latest',
}) })
}, [scrollToTop, feed, queryClient, setHasNew]) }, [scrollToTop, feed, queryClient, setHasNew])
let feedPollInterval
if (
useGate('disable_poll_on_discover') &&
feed === // Discover
'feedgen|at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot'
) {
feedPollInterval = undefined
} else {
feedPollInterval = POLL_FREQ
}
return ( return (
<View testID={testID} style={s.h100pct}> <View testID={testID} style={s.h100pct}>
<MainScrollProvider> <MainScrollProvider>
@ -108,7 +122,7 @@ export function FeedPage({
enabled={isPageFocused} enabled={isPageFocused}
feed={feed} feed={feed}
feedParams={feedParams} feedParams={feedParams}
pollInterval={POLL_FREQ} pollInterval={feedPollInterval}
disablePoll={hasNew} disablePoll={hasNew}
scrollElRef={scrollElRef} scrollElRef={scrollElRef}
onScrolledDownChange={setIsScrolledDown} onScrolledDownChange={setIsScrolledDown}

View file

@ -8,32 +8,33 @@ import {
View, View,
ViewStyle, ViewStyle,
} from 'react-native' } from 'react-native'
import {useQueryClient} from '@tanstack/react-query'
import {List, ListRef} from '../util/List'
import {PostFeedLoadingPlaceholder} from '../util/LoadingPlaceholder'
import {FeedErrorMessage} from './FeedErrorMessage'
import {FeedSlice} from './FeedSlice'
import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
import {useAnalytics} from 'lib/analytics/analytics'
import {useTheme} from 'lib/ThemeContext'
import {logger} from '#/logger'
import {
RQKEY,
FeedDescriptor,
FeedParams,
usePostFeedQuery,
pollLatest,
} from '#/state/queries/post-feed'
import {isWeb} from '#/platform/detection'
import {listenPostCreated} from '#/state/events'
import {useSession} from '#/state/session'
import {STALE} from '#/state/queries'
import {msg} from '@lingui/macro' import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react' import {useLingui} from '@lingui/react'
import {DiscoverFallbackHeader} from './DiscoverFallbackHeader' import {useQueryClient} from '@tanstack/react-query'
import {FALLBACK_MARKER_POST} from '#/lib/api/feed/home' import {FALLBACK_MARKER_POST} from '#/lib/api/feed/home'
import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
import {logEvent} from '#/lib/statsig/statsig' import {logEvent} from '#/lib/statsig/statsig'
import {logger} from '#/logger'
import {isWeb} from '#/platform/detection'
import {listenPostCreated} from '#/state/events'
import {STALE} from '#/state/queries'
import {
FeedDescriptor,
FeedParams,
pollLatest,
RQKEY,
usePostFeedQuery,
} from '#/state/queries/post-feed'
import {useSession} from '#/state/session'
import {useAnalytics} from 'lib/analytics/analytics'
import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
import {useTheme} from 'lib/ThemeContext'
import {List, ListRef} from '../util/List'
import {PostFeedLoadingPlaceholder} from '../util/LoadingPlaceholder'
import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
import {DiscoverFallbackHeader} from './DiscoverFallbackHeader'
import {FeedErrorMessage} from './FeedErrorMessage'
import {FeedSlice} from './FeedSlice'
const LOADING_ITEM = {_reactKey: '__loading__'} const LOADING_ITEM = {_reactKey: '__loading__'}
const EMPTY_FEED_ITEM = {_reactKey: '__empty__'} const EMPTY_FEED_ITEM = {_reactKey: '__empty__'}
@ -217,6 +218,7 @@ let Feed = ({
track('Feed:onRefresh') track('Feed:onRefresh')
logEvent('feed:refresh', { logEvent('feed:refresh', {
feedType: feedType, feedType: feedType,
feedUrl: feed,
reason: 'pull-to-refresh', reason: 'pull-to-refresh',
}) })
setIsPTRing(true) setIsPTRing(true)
@ -227,13 +229,14 @@ let Feed = ({
logger.error('Failed to refresh posts feed', {message: err}) logger.error('Failed to refresh posts feed', {message: err})
} }
setIsPTRing(false) setIsPTRing(false)
}, [refetch, track, setIsPTRing, onHasNew, feedType]) }, [refetch, track, setIsPTRing, onHasNew, feed, feedType])
const onEndReached = React.useCallback(async () => { const onEndReached = React.useCallback(async () => {
if (isFetching || !hasNextPage || isError) return if (isFetching || !hasNextPage || isError) return
logEvent('feed:endReached', { logEvent('feed:endReached', {
feedType: feedType, feedType: feedType,
feedUrl: feed,
itemCount: feedItems.length, itemCount: feedItems.length,
}) })
track('Feed:onEndReached') track('Feed:onEndReached')
@ -248,6 +251,7 @@ let Feed = ({
isError, isError,
fetchNextPage, fetchNextPage,
track, track,
feed,
feedType, feedType,
feedItems.length, feedItems.length,
]) ])