From e9cea4b2bf1d2fc0d4e10b71feac3ef49d6799c2 Mon Sep 17 00:00:00 2001 From: phranck Date: Wed, 4 Feb 2026 21:57:19 +0100 Subject: [PATCH] perf: preload stargazer avatars for instant Stargazers panel --- docs/app/dashboard/page.tsx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/app/dashboard/page.tsx b/docs/app/dashboard/page.tsx index c50f126..520ab3a 100644 --- a/docs/app/dashboard/page.tsx +++ b/docs/app/dashboard/page.tsx @@ -25,6 +25,23 @@ export default function DashboardPage() { const { refresh, ...stats } = useGitHubStats(); const [showStargazers, setShowStargazers] = useState(false); + // Preload stargazer avatar images in background so the panel opens instantly + useEffect(() => { + if (!stats.stargazers || stats.stargazers.length === 0) return; + const head = document.head || document.getElementsByTagName('head')[0]; + const existing = new Set(Array.from(head.querySelectorAll('link[rel="preload"][as="image"]')).map((l) => (l as HTMLLinkElement).href)); + + stats.stargazers.slice(0, 100).forEach((s) => { + const url = s.avatarUrl + '&s=128'; + if (existing.has(url)) return; + const link = document.createElement('link'); + link.rel = 'preload'; + link.as = 'image'; + link.href = url; + head.appendChild(link); + }); + }, [stats.stargazers]); + const toggleStargazers = useCallback(() => setShowStargazers((prev) => !prev), []); const closeStargazers = useCallback(() => setShowStargazers(false), []);