From 2442634b2a80dd97581882cffb2639d075395eef Mon Sep 17 00:00:00 2001
From: Tunglies <77394545+Tunglies@users.noreply.github.com>
Date: Mon, 29 Jun 2026 06:30:54 +0800
Subject: [PATCH] fix: lazy load non-home routes
---
src/pages/_layout.tsx | 17 ++++++++++++++---
src/pages/_routers.tsx | 30 ++++++++++++++++++------------
2 files changed, 32 insertions(+), 15 deletions(-)
diff --git a/src/pages/_layout.tsx b/src/pages/_layout.tsx
index ecdce94b4..c8a94e22c 100644
--- a/src/pages/_layout.tsx
+++ b/src/pages/_layout.tsx
@@ -24,7 +24,15 @@ import {
import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'
import type { CSSProperties } from 'react'
-import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
+import {
+ lazy,
+ Suspense,
+ useCallback,
+ useEffect,
+ useMemo,
+ useRef,
+ useState,
+} from 'react'
import { useTranslation } from 'react-i18next'
import { Outlet, useLocation, useNavigate } from 'react-router'
@@ -51,13 +59,14 @@ import {
} from './_layout/hooks'
import { handleNoticeMessage } from './_layout/utils'
import { navItems } from './_routers'
-import LogsPage from './logs'
import 'dayjs/locale/ru'
import 'dayjs/locale/zh-cn'
export const portableFlag = false
+const LogsPage = lazy(() => import('./logs'))
+
type NavItem = (typeof navItems)[number]
type MenuContextPosition = { top: number; left: number }
@@ -463,7 +472,9 @@ const Layout = () => {
bottom: 0,
}}
>
-
+
+
+
)}
diff --git a/src/pages/_routers.tsx b/src/pages/_routers.tsx
index bb1f0b63c..b8433d8c5 100644
--- a/src/pages/_routers.tsx
+++ b/src/pages/_routers.tsx
@@ -6,6 +6,7 @@ import LockOpenRoundedIcon from '@mui/icons-material/LockOpenRounded'
import SettingsRoundedIcon from '@mui/icons-material/SettingsRounded'
import SubjectRoundedIcon from '@mui/icons-material/SubjectRounded'
import WifiRoundedIcon from '@mui/icons-material/WifiRounded'
+import { lazy, Suspense, type ComponentType } from 'react'
import { createBrowserRouter, RouteObject } from 'react-router'
import ConnectionsSvg from '@/assets/image/itemicon/connections.svg?react'
@@ -18,13 +19,18 @@ import SettingsSvg from '@/assets/image/itemicon/settings.svg?react'
import UnlockSvg from '@/assets/image/itemicon/unlock.svg?react'
import Layout from './_layout'
-import ConnectionsPage from './connections'
import HomePage from './home'
-import ProfilesPage from './profiles'
-import ProxiesPage from './proxies'
-import RulesPage from './rules'
-import SettingsPage from './settings'
-import UnlockPage from './unlock'
+
+const createLazyRoute = (load: () => Promise<{ default: ComponentType }>) => {
+ const Component = lazy(load)
+ const LazyRoute = () => (
+
+
+
+ )
+
+ return LazyRoute
+}
export const navItems = [
{
@@ -37,25 +43,25 @@ export const navItems = [
label: 'layout.components.navigation.tabs.proxies',
path: '/proxies',
icon: [, ],
- Component: ProxiesPage,
+ Component: createLazyRoute(() => import('./proxies')),
},
{
label: 'layout.components.navigation.tabs.profiles',
path: '/profile',
icon: [, ],
- Component: ProfilesPage,
+ Component: createLazyRoute(() => import('./profiles')),
},
{
label: 'layout.components.navigation.tabs.connections',
path: '/connections',
icon: [, ],
- Component: ConnectionsPage,
+ Component: createLazyRoute(() => import('./connections')),
},
{
label: 'layout.components.navigation.tabs.rules',
path: '/rules',
icon: [, ],
- Component: RulesPage,
+ Component: createLazyRoute(() => import('./rules')),
},
{
label: 'layout.components.navigation.tabs.logs',
@@ -67,13 +73,13 @@ export const navItems = [
label: 'layout.components.navigation.tabs.unlock',
path: '/unlock',
icon: [, ],
- Component: UnlockPage,
+ Component: createLazyRoute(() => import('./unlock')),
},
{
label: 'layout.components.navigation.tabs.settings',
path: '/settings',
icon: [, ],
- Component: SettingsPage,
+ Component: createLazyRoute(() => import('./settings')),
},
]