perf: skip minute-tick subscription for actors without a live status (#11441)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Tomasz Zawadzki
2026-08-11 15:26:52 +02:00
committed by GitHub
parent 89cb08e93c
commit 2a4378c40b
2 changed files with 19 additions and 4 deletions
+7 -1
View File
@@ -97,7 +97,13 @@ export function useLiveNowConfig(): LiveNowConfig {
export function useActorStatus(actor?: bsky.profile.AnyProfileView) {
const shadowed = useMaybeProfileShadow(actor)
const tick = useTickEveryMinute()
/*
* The minute tick only exists to re-validate an existing status's expiry,
* so actors without a status record skip the subscription entirely. This
* keeps the every-minute tick from re-rendering every post in a feed.
*/
const hasStatus = !!(shadowed && 'status' in shadowed && shadowed.status)
const tick = useTickEveryMinute(hasStatus)
const config = useLiveNowConfig()
const moderationOpts = useModerationOpts()
+12 -3
View File
@@ -1,4 +1,4 @@
import {createContext, useContext, useEffect, useState} from 'react'
import {createContext, use, useEffect, useState} from 'react'
type StateContext = number
@@ -16,6 +16,15 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
return <stateContext.Provider value={tick}>{children}</stateContext.Provider>
}
export function useTickEveryMinute() {
return useContext(stateContext)
/**
* Returns a timestamp that updates once per minute, re-rendering the caller
* on every tick. Pass `enabled: false` to skip subscribing entirely - the
* caller then never re-renders on tick and receives a stable `0`. Relies on
* React 19 `use()`, which may be called conditionally.
*/
export function useTickEveryMinute(enabled: boolean = true) {
if (enabled) {
return use(stateContext)
}
return 0
}