Remove unnecessary SSR prefetch for user subscriptions
Problem
server-side-layout.tsx:22 prefetches user subscriptions on every feed page (/trending, /hot, etc.), but for non-logged-in users this fetches the hive.blog account's subscriptions which are never used.
Root Cause
-
SSR prefetch uses
observerfrom cookies, which falls back toDEFAULT_OBSERVER = 'hive.blog':// server-side-layout.tsx:21-24 await queryClient.prefetchQuery({ queryKey: ['subscriptions', observer], // observer = 'hive.blog' for non-logged-in queryFn: () => getSubscriptions(observer) }); -
Client-side query uses a different key and is disabled for non-logged-in users:
// main-page-layout.tsx:26-30 const { data } = useQuery({ queryKey: ['subscriptions', user.username], queryFn: () => getSubscriptions(user.username), enabled: user.isLoggedIn && !!user?.username // DISABLED for non-logged-in }); -
Result for non-logged-in users:
- SSR caches
['subscriptions', 'hive.blog']- never used - Client query disabled - shows
CommunitiesSidebarinstead - API call is completely wasted
- SSR caches
Impact
- 1 extra API call per feed page visit by non-logged-in users
- Contributes to API load (relevant to 503 errors during high traffic)
- Query key mismatch means SSR data can't hydrate properly
Proposed Fix
Skip the prefetch for non-logged-in users:
// server-side-layout.tsx
import { DEFAULT_OBSERVER } from '@/blog/lib/utils';
// Only prefetch if logged in (observer is actual username, not default)
if (observer && observer !== DEFAULT_OBSERVER) {
await queryClient.prefetchQuery({
queryKey: ['subscriptions', observer],
queryFn: () => getSubscriptions(observer)
});
}
Files to Modify
-
apps/blog/features/layouts/sorts/server-side-layout.tsx(line 21-24)
Related
- API call comparison analysis:
/home/dev/workspace/hive/denser/NOTES/03-api-call-comparison.md - See also: #764 (API call optimization meta-issue)