|
| 1 | +import { lazy, Suspense } from 'react'; |
1 | 2 | import { Route, Routes } from 'react-router-dom'; |
2 | 3 | import Layout from './components/Layout'; |
3 | | -import DashboardPage from './pages/DashboardPage'; |
4 | | -import MinificationBenchmarksPage from './pages/MinificationBenchmarksPage'; |
5 | | -import NpmDownloadsPage from './pages/NpmDownloadsPage'; |
6 | | -import RolldownStatsPage from './pages/RolldownStatsPage'; |
| 4 | + |
| 5 | +// Lazy load all page components for code-splitting |
| 6 | +const DashboardPage = lazy(() => import('./pages/DashboardPage')); |
| 7 | +const MinificationBenchmarksPage = lazy(() => import('./pages/MinificationBenchmarksPage')); |
| 8 | +const NpmDownloadsPage = lazy(() => import('./pages/NpmDownloadsPage')); |
| 9 | +const RolldownStatsPage = lazy(() => import('./pages/RolldownStatsPage')); |
| 10 | + |
| 11 | +// Loading component for Suspense fallback |
| 12 | +const PageLoader = () => ( |
| 13 | + <div className="flex items-center justify-center min-h-[400px]"> |
| 14 | + <div className="text-gray-500 dark:text-gray-400">Loading...</div> |
| 15 | + </div> |
| 16 | +); |
7 | 17 |
|
8 | 18 | function App() { |
9 | 19 | return ( |
10 | 20 | <Routes> |
11 | 21 | <Route path='/' element={<Layout />}> |
12 | | - <Route index element={<DashboardPage />} /> |
13 | | - <Route path='rolldown-stats' element={<RolldownStatsPage />} /> |
14 | | - <Route path='minification' element={<MinificationBenchmarksPage />} /> |
15 | | - <Route path='npm-downloads' element={<NpmDownloadsPage />} /> |
| 22 | + <Route index element={ |
| 23 | + <Suspense fallback={<PageLoader />}> |
| 24 | + <DashboardPage /> |
| 25 | + </Suspense> |
| 26 | + } /> |
| 27 | + <Route path='rolldown-stats' element={ |
| 28 | + <Suspense fallback={<PageLoader />}> |
| 29 | + <RolldownStatsPage /> |
| 30 | + </Suspense> |
| 31 | + } /> |
| 32 | + <Route path='minification' element={ |
| 33 | + <Suspense fallback={<PageLoader />}> |
| 34 | + <MinificationBenchmarksPage /> |
| 35 | + </Suspense> |
| 36 | + } /> |
| 37 | + <Route path='npm-downloads' element={ |
| 38 | + <Suspense fallback={<PageLoader />}> |
| 39 | + <NpmDownloadsPage /> |
| 40 | + </Suspense> |
| 41 | + } /> |
16 | 42 | </Route> |
17 | 43 | </Routes> |
18 | 44 | ); |
|
0 commit comments