From b5eafdeed8e04bd458409d3d5aca45c5160c2d85 Mon Sep 17 00:00:00 2001 From: Nicolas Varrot Date: Thu, 12 Feb 2026 09:05:51 +0000 Subject: [PATCH] perf: lazy-load Chat component to reduce initial bundle size The Chat component (and its heavy markdown dependencies ~476KB) are now loaded via React.lazy() + Suspense. Users see the login screen faster since only ~245KB is needed initially instead of ~750KB. --- src/App.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index f81d39a..0137b4d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,13 +1,14 @@ -import { useState, useEffect, useCallback, useRef } from 'react'; +import { useState, useEffect, useCallback, useRef, lazy, Suspense } from 'react'; import { useGateway } from './hooks/useGateway'; import { useNotifications } from './hooks/useNotifications'; import { Header } from './components/Header'; import { Sidebar } from './components/Sidebar'; -import { Chat } from './components/Chat'; import { LoginScreen } from './components/LoginScreen'; import { ConnectionBanner } from './components/ConnectionBanner'; import { KeyboardShortcuts } from './components/KeyboardShortcuts'; +const Chat = lazy(() => import('./components/Chat').then(m => ({ default: m.Chat }))); + export default function App() { const { status, messages, sessions, activeSession, isGenerating, isLoadingHistory, @@ -77,7 +78,9 @@ export default function App() {
setSidebarOpen(!sidebarOpen)} activeSessionData={sessions.find(s => s.key === activeSession)} onLogout={logout} soundEnabled={soundEnabled} onToggleSound={toggleSound} /> - +
Loading…
}> + + setShortcutsOpen(false)} />