From 0aabbfa9378576bc78264afd085e51fa8d624062 Mon Sep 17 00:00:00 2001 From: ReaJason Date: Thu, 26 Jun 2025 22:31:05 +0800 Subject: [PATCH] perf: reduce js size --- web/bun.lockb | Bin 164132 -> 161860 bytes web/package.json | 4 ++-- web/src/components/code-viewer.tsx | 6 +++-- web/src/components/main-config-card.tsx | 2 +- web/src/components/package-config-card.tsx | 2 +- web/src/components/results/multi-packer.tsx | 3 +-- .../components/results/result-component.tsx | 2 +- web/src/components/shell-result.tsx | 5 +++-- web/src/components/theme-provider.tsx | 21 ++++++++++-------- web/src/pages/memshell.tsx | 6 ++--- web/src/router.tsx | 4 ++-- web/vite.config.ts | 15 +++++++++++++ 12 files changed, 45 insertions(+), 25 deletions(-) diff --git a/web/bun.lockb b/web/bun.lockb index c6973a84eee38f14c9b6e5a0712510922e0ee6fc..aa378ee8c9e1edf453ff9b9004ed35e86b8844a6 100755 GIT binary patch delta 15760 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 F_ { value: string; src?: string; @@ -49,7 +51,7 @@ export function CopyButton({ value }: Readonly = { [ShellToolType.Custom]: , }; -export function MainConfigCard({ +export default function MainConfigCard({ mainConfig, form, servers, diff --git a/web/src/components/package-config-card.tsx b/web/src/components/package-config-card.tsx index a207bdf6..23a10eb6 100644 --- a/web/src/components/package-config-card.tsx +++ b/web/src/components/package-config-card.tsx @@ -13,7 +13,7 @@ type Option = { value: string; }; -export function PackageConfigCard({ +export default function PackageConfigCard({ packerConfig, form, }: Readonly<{ diff --git a/web/src/components/results/multi-packer.tsx b/web/src/components/results/multi-packer.tsx index b9c20bd8..d02f15ab 100644 --- a/web/src/components/results/multi-packer.tsx +++ b/web/src/components/results/multi-packer.tsx @@ -1,8 +1,7 @@ import { TFunction } from "i18next"; import { useEffect, useState } from "react"; -import { CodeViewer } from "../code-viewer"; +import CodeViewer from "@/components/code-viewer"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select"; - export function MultiPackResult({ allPackResults, packMethod, diff --git a/web/src/components/results/result-component.tsx b/web/src/components/results/result-component.tsx index 621fa96b..1919cbc3 100644 --- a/web/src/components/results/result-component.tsx +++ b/web/src/components/results/result-component.tsx @@ -1,6 +1,6 @@ import { TFunction } from "i18next"; +import CodeViewer from "@/components/code-viewer"; import { GenerateResult } from "@/types/shell"; -import { CodeViewer } from "../code-viewer"; import { AgentResult } from "./agent"; import { JarResult } from "./jar-result"; import { MultiPackResult } from "./multi-packer"; diff --git a/web/src/components/shell-result.tsx b/web/src/components/shell-result.tsx index 214a025c..129ce1e6 100644 --- a/web/src/components/shell-result.tsx +++ b/web/src/components/shell-result.tsx @@ -1,16 +1,17 @@ import { DownloadIcon } from "lucide-react"; import { useTranslation } from "react-i18next"; import { toast } from "sonner"; -import { CodeViewer } from "@/components/code-viewer.tsx"; + import { QuickUsage } from "@/components/quick-usage.tsx"; import { Button } from "@/components/ui/button.tsx"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs.tsx"; import { downloadBytes } from "@/lib/utils.ts"; import { GenerateResult } from "@/types/shell.ts"; +import CodeViewer from "./code-viewer"; import { BasicInfo } from "./results/basic-info"; import { ResultComponent } from "./results/result-component"; -export function ShellResult({ +export default function ShellResult({ packResult, allPackResults, packMethod, diff --git a/web/src/components/theme-provider.tsx b/web/src/components/theme-provider.tsx index 7f038361..6012cbb4 100644 --- a/web/src/components/theme-provider.tsx +++ b/web/src/components/theme-provider.tsx @@ -1,4 +1,4 @@ -import { createContext, useContext, useEffect, useState } from "react"; +import { createContext, useContext, useEffect, useMemo, useState } from "react"; type Theme = "dark" | "light" | "system"; @@ -25,7 +25,7 @@ export function ThemeProvider({ defaultTheme = "system", storageKey = "vite-ui-theme", ...props -}: ThemeProviderProps) { +}: Readonly) { const [theme, setTheme] = useState(() => (localStorage.getItem(storageKey) as Theme) || defaultTheme); useEffect(() => { @@ -45,13 +45,16 @@ export function ThemeProvider({ root.classList.add(theme); }, [theme]); - const value = { - theme, - setTheme: (theme: Theme) => { - localStorage.setItem(storageKey, theme); - setTheme(theme); - }, - }; + const value = useMemo( + () => ({ + theme, + setTheme: (theme: Theme) => { + localStorage.setItem(storageKey, theme); + setTheme(theme); + }, + }), + [theme, storageKey], + ); return ( diff --git a/web/src/pages/memshell.tsx b/web/src/pages/memshell.tsx index b1f1dfea..b53368c7 100644 --- a/web/src/pages/memshell.tsx +++ b/web/src/pages/memshell.tsx @@ -5,9 +5,9 @@ import { useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { useLoaderData } from "react-router-dom"; import { toast } from "sonner"; -import { MainConfigCard } from "@/components/main-config-card.tsx"; -import { PackageConfigCard } from "@/components/package-config-card.tsx"; -import { ShellResult } from "@/components/shell-result.tsx"; +import MainConfigCard from "@/components/main-config-card.tsx"; +import PackageConfigCard from "@/components/package-config-card.tsx"; +import ShellResult from "@/components/shell-result.tsx"; import { Button } from "@/components/ui/button"; import { Form } from "@/components/ui/form.tsx"; import { env } from "@/config.ts"; diff --git a/web/src/router.tsx b/web/src/router.tsx index 7fbd4dcf..bad22b02 100644 --- a/web/src/router.tsx +++ b/web/src/router.tsx @@ -1,4 +1,4 @@ -import { createBrowserRouter } from "react-router-dom"; +import { createHashRouter } from "react-router-dom"; import RootLayout from "@/components/layouts/root-layout"; import { env } from "@/config"; import MemShellPage from "@/pages/memshell"; @@ -42,7 +42,7 @@ const parseUrlParams = (searchParams: URLSearchParams): Partial => { return result; }; -export const router = createBrowserRouter( +export const router = createHashRouter( [ { path: "/", diff --git a/web/vite.config.ts b/web/vite.config.ts index 27578c79..f4ba1835 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -11,4 +11,19 @@ export default defineConfig({ "@": path.resolve(__dirname, "./src"), }, }, + build: { + rollupOptions: { + output: { + manualChunks: { + highlight: ["react-syntax-highlighter"], + radixUi: ["radix-ui"], + motion: ["framer-motion", "motion"], + sonner: ["sonner"], + yup: ["yup"], + i18n: ["react-i18next", "i18next"], + reactRouter: ["react-router", "react-router-dom"], + }, + }, + }, + }, });