- matrix-gateway: POST /internal/matrix/presence/online endpoint - usePresenceHeartbeat hook with activity tracking - Auto away after 5 min inactivity - Offline on page close/visibility change - Integrated in MatrixChatRoom component
5.7 KiB
5.7 KiB
✅ Виправлення постійного перезавантаження кабінетів мікроДАО
Дата: 2025-11-23
Статус: ✅ Виправлено
🐛 Проблема
Сторінки кабінетів мікроДАО постійно перезавантажувалися через:
- Нестабільні обчислення на кожному рендері
- Відсутність мемоізації
- Занадто часті оновлення через React Query
✅ Рішення
1. Додано мемоізацію обчислень
Використано useMemo для:
orchestratorMapping- маппінг між агентами та мікроДАОmicroDaoId- правильний ID мікроДАОorchestratorAgentId- ID агента-оркестратораorchestratorFromNode1- пошук оркестратора серед агентів з НОДИ1allAgents- об'єднаний список агентівteamData- дані команди (з fallback)
Файл: src/pages/MicroDaoCabinetPage.tsx
// Мемоізуємо маппінг
const orchestratorMapping = useMemo(
() => getAgentByMicroDaoId(microDaoIdParam),
[microDaoIdParam]
);
// Мемоізуємо ID
const microDaoId = useMemo(
() => orchestratorMapping?.microDaoId || microDaoIdParam,
[orchestratorMapping, microDaoIdParam]
);
// Мемоізуємо пошук оркестратора
const orchestratorFromNode1 = useMemo(() => {
// ... логіка пошуку
}, [node1AgentsData, orchestratorAgentId, orchestratorMapping]);
// Мемоізуємо об'єднаний список агентів
const allAgents = useMemo(() => {
// ... логіка об'єднання
}, [agentsData?.items, orchestratorFromNode1]);
2. Оптимізовано React Query
Додано налаштування для зменшення перезавантажень:
const { data: team } = useQuery({
queryKey: ['team', microDaoId],
queryFn: async () => { /* ... */ },
enabled: !!microDaoId,
staleTime: 60000, // Дані вважаються свіжими 1 хвилину
gcTime: 300000, // Кеш зберігається 5 хвилин
refetchOnWindowFocus: false, // Не оновлювати при фокусі вікна
refetchOnMount: false, // Не оновлювати при монтуванні (якщо дані є в кеші)
});
Налаштування:
staleTime: 60000- дані вважаються свіжими 1 хвилинуgcTime: 300000- кеш зберігається 5 хвилинrefetchOnWindowFocus: false- не оновлювати при фокусі вікнаrefetchOnMount: false- не оновлювати при монтуванні (якщо дані є в кеші)
3. Оптимізовано завантаження агентів з НОДИ1
Змінено queryKey:
- Було:
['node1-agents-for-microdao', microDaoId] - Стало:
['node1-agents-for-microdao']
Причина: Агенти з НОДИ1 однакові для всіх мікроДАО, тому не потрібно робити окремий запит для кожного мікроДАО.
📊 Результат
До виправлення:
- ❌ Сторінка постійно перезавантажувалася
- ❌ Обчислення виконувалися на кожному рендері
- ❌ React Query робив занадто багато запитів
Після виправлення:
- ✅ Сторінка стабільна, не перезавантажується
- ✅ Обчислення мемоізовані
- ✅ React Query використовує кеш ефективно
- ✅ Менше запитів до API
🔧 Технічні деталі
Мемоізація
Використано useMemo для:
- orchestratorMapping - обчислюється тільки при зміні
microDaoIdParam - microDaoId - обчислюється тільки при зміні
orchestratorMappingабоmicroDaoIdParam - orchestratorAgentId - обчислюється тільки при зміні
orchestratorMapping - orchestratorFromNode1 - обчислюється тільки при зміні
node1AgentsData,orchestratorAgentIdабоorchestratorMapping - allAgents - обчислюється тільки при зміні
agentsData?.itemsабоorchestratorFromNode1 - teamData - обчислюється тільки при зміні
teamабоorchestratorMapping
React Query оптимізація
Налаштування для всіх запитів:
staleTime: 60000- дані свіжі 1 хвилинуgcTime: 300000- кеш зберігається 5 хвилинrefetchOnWindowFocus: false- не оновлювати при фокусіrefetchOnMount: false- не оновлювати при монтуванні
✅ Статус
Виправлено:
- ✅ Постійне перезавантаження усунуто
- ✅ Мемоізація обчислень
- ✅ Оптимізація React Query
- ✅ Стабільна робота кабінетів мікроДАО
Результат:
- ✅ Сторінки кабінетів мікроДАО працюють стабільно
- ✅ Немає зайвих перезавантажень
- ✅ Ефективне використання кешу
Проблема з постійним перезавантаженням виправлена! 🎉