diff --git a/src/components/Map/usePostsEngine.js b/src/components/Map/usePostsEngine.js index 701a2c2..596945a 100644 --- a/src/components/Map/usePostsEngine.js +++ b/src/components/Map/usePostsEngine.js @@ -113,8 +113,8 @@ function getPostTimeMs(p) { return d.getTime(); } -const MAX_POOL_POSTS = 150; -const MAX_VISIBLE_POSTS = 90; +const MAX_POOL_POSTS = 120; +const MAX_VISIBLE_POSTS = 70; function prunePosts(posts, center, maxCount) { if (!Array.isArray(posts) || posts.length <= maxCount) return posts || []; @@ -151,6 +151,8 @@ export function usePostsEngine({ const allPostsRef = useRef([]); const lastFetchRef = useRef({ center: null, radiusKm: null, filterKey: "", timeFilter: "", bounds: null }); const delayedFetchRef = useRef(null); + const moveDebounceRef = useRef(null); + const initialLoadRef = useRef(true); const autoWidenRef = useRef(false); const [mapReady, setMapReady] = useState(false); const clusterModeRef = useRef(false); @@ -656,7 +658,7 @@ export function usePostsEngine({ lat, lon: lng, radius_km: radiusKm, - limit: 50, + limit: 40, bounds, username: username || undefined, }); @@ -725,9 +727,21 @@ export function usePostsEngine({ } } - load(); + const delay = initialLoadRef.current ? 0 : 2400; + initialLoadRef.current = false; + if (moveDebounceRef.current) { + clearTimeout(moveDebounceRef.current); + moveDebounceRef.current = null; + } + moveDebounceRef.current = setTimeout(() => { + if (!cancelled) load(); + }, delay); return () => { cancelled = true; + if (moveDebounceRef.current) { + try { clearTimeout(moveDebounceRef.current); } catch {} + moveDebounceRef.current = null; + } if (delayedFetchRef.current) { try { clearTimeout(delayedFetchRef.current); } catch {} delayedFetchRef.current = null; @@ -755,7 +769,7 @@ export function usePostsEngine({ lat, lon, radius_km: viewParams?.radiusKm, - limit: 80, + limit: 60, }); if (cancelled) return; const posts = Array.isArray(data?.posts) ? data.posts : [];