Reduce calls to getFeedGenerator and getFeed (#2166)
* Reduce calls to getFeedGenerator by the mergefeed * Dont run end-of-follows mergefeed requests until actually at the end of the feed * build AWS container --------- Co-authored-by: Jake Gold <jake@blueskyweb.xyz>zio/stable
parent
3d229b5fd6
commit
b82c5177b9
|
@ -3,7 +3,7 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- main
|
||||
- jake/bskyweb-additions
|
||||
- traffic-reduction
|
||||
env:
|
||||
REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_REGISTRY }}
|
||||
USERNAME: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_USERNAME }}
|
||||
|
|
|
@ -62,7 +62,7 @@ export class MergeFeedAPI implements FeedAPI {
|
|||
|
||||
// always keep following topped up
|
||||
if (this.following.numReady < limit) {
|
||||
promises.push(this.following.fetchNext(60))
|
||||
await this.following.fetchNext(60)
|
||||
}
|
||||
|
||||
// pick the next feeds to sample from
|
||||
|
@ -73,11 +73,15 @@ export class MergeFeedAPI implements FeedAPI {
|
|||
}
|
||||
|
||||
// top up the feeds
|
||||
const outOfFollows =
|
||||
!this.following.hasMore && this.following.numReady < limit
|
||||
if (this.params.mergeFeedEnabled || outOfFollows) {
|
||||
for (const feed of feeds) {
|
||||
if (feed.numReady < 5) {
|
||||
promises.push(feed.fetchNext(10))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// wait for requests (all capped at a fixed timeout)
|
||||
await Promise.all(promises)
|
||||
|
@ -216,22 +220,10 @@ class MergeFeedSource_Custom extends MergeFeedSource {
|
|||
super(feedTuners)
|
||||
this.sourceInfo = {
|
||||
$type: 'reasonFeedSource',
|
||||
displayName: feedUri.split('/').pop() || '',
|
||||
uri: feedUriToHref(feedUri),
|
||||
uri: feedUri,
|
||||
href: feedUriToHref(feedUri),
|
||||
}
|
||||
this.minDate = new Date(Date.now() - POST_AGE_CUTOFF)
|
||||
getAgent()
|
||||
.app.bsky.feed.getFeedGenerator({
|
||||
feed: feedUri,
|
||||
})
|
||||
.then(
|
||||
res => {
|
||||
if (this.sourceInfo) {
|
||||
this.sourceInfo.displayName = res.data.view.displayName
|
||||
}
|
||||
},
|
||||
_err => {},
|
||||
)
|
||||
}
|
||||
|
||||
protected async _getFeed(
|
||||
|
|
|
@ -19,7 +19,7 @@ export interface FeedAPI {
|
|||
export interface ReasonFeedSource {
|
||||
$type: 'reasonFeedSource'
|
||||
uri: string
|
||||
displayName: string
|
||||
href: string
|
||||
}
|
||||
|
||||
export function isReasonFeedSource(v: unknown): v is ReasonFeedSource {
|
||||
|
|
|
@ -33,6 +33,7 @@ import {MAX_POST_LINES} from 'lib/constants'
|
|||
import {countLines} from 'lib/strings/helpers'
|
||||
import {useComposerControls} from '#/state/shell/composer'
|
||||
import {Shadow, usePostShadow, POST_TOMBSTONE} from '#/state/cache/post-shadow'
|
||||
import {FeedNameText} from '../util/FeedInfoText'
|
||||
|
||||
export function FeedItem({
|
||||
post,
|
||||
|
@ -177,22 +178,20 @@ let FeedItemInner = ({
|
|||
|
||||
<View style={{paddingTop: 12, flexShrink: 1}}>
|
||||
{isReasonFeedSource(reason) ? (
|
||||
<Link
|
||||
title={sanitizeDisplayName(reason.displayName)}
|
||||
href={reason.uri}>
|
||||
<Link href={reason.href}>
|
||||
<Text
|
||||
type="sm-bold"
|
||||
style={pal.textLight}
|
||||
lineHeight={1.2}
|
||||
numberOfLines={1}>
|
||||
From{' '}
|
||||
<TextLinkOnWebOnly
|
||||
<FeedNameText
|
||||
type="sm-bold"
|
||||
style={pal.textLight}
|
||||
uri={reason.uri}
|
||||
href={reason.href}
|
||||
lineHeight={1.2}
|
||||
numberOfLines={1}
|
||||
text={sanitizeDisplayName(reason.displayName)}
|
||||
href={reason.uri}
|
||||
style={pal.textLight}
|
||||
/>
|
||||
</Text>
|
||||
</Link>
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
import React from 'react'
|
||||
import {StyleProp, StyleSheet, TextStyle} from 'react-native'
|
||||
import {TextLinkOnWebOnly} from './Link'
|
||||
import {LoadingPlaceholder} from './LoadingPlaceholder'
|
||||
import {TypographyVariant} from 'lib/ThemeContext'
|
||||
import {sanitizeDisplayName} from 'lib/strings/display-names'
|
||||
import {useFeedSourceInfoQuery} from '#/state/queries/feed'
|
||||
|
||||
export function FeedNameText({
|
||||
type = 'md',
|
||||
uri,
|
||||
href,
|
||||
lineHeight,
|
||||
numberOfLines,
|
||||
style,
|
||||
}: {
|
||||
type?: TypographyVariant
|
||||
uri: string
|
||||
href: string
|
||||
lineHeight?: number
|
||||
numberOfLines?: number
|
||||
style?: StyleProp<TextStyle>
|
||||
}) {
|
||||
const {data, isError} = useFeedSourceInfoQuery({uri})
|
||||
|
||||
let inner
|
||||
if (data?.displayName || isError) {
|
||||
const displayName = data?.displayName || uri.split('/').pop() || ''
|
||||
inner = (
|
||||
<TextLinkOnWebOnly
|
||||
type={type}
|
||||
style={style}
|
||||
lineHeight={lineHeight}
|
||||
numberOfLines={numberOfLines}
|
||||
href={href}
|
||||
text={sanitizeDisplayName(displayName)}
|
||||
/>
|
||||
)
|
||||
} else {
|
||||
inner = (
|
||||
<LoadingPlaceholder
|
||||
width={80}
|
||||
height={8}
|
||||
style={styles.loadingPlaceholder}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
return inner
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
loadingPlaceholder: {position: 'relative', top: 1, left: 2},
|
||||
})
|
Loading…
Reference in New Issue