From a978ec07f44c72031594ab862c4e97522f562e00 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Fri, 30 Oct 2026 12:54:31 +0800 Subject: [PATCH] =?UTF-8?q?perf(frontend):=20=E6=8B=86=E5=88=86=20vendor?= =?UTF-8?q?=20=E5=8C=85=E9=99=8D=E4=BD=8E=E9=A6=96=E5=B1=8F=E4=BD=93?= =?UTF-8?q?=E7=A7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Phase1-验收报告.md | 20 +++++++++++--------- frontend/vite.config.ts | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/docs/Phase1-验收报告.md b/docs/Phase1-验收报告.md index 8bf5e3b..ce0e128 100644 --- a/docs/Phase1-验收报告.md +++ b/docs/Phase1-验收报告.md @@ -173,19 +173,21 @@ listings = ok,返回 1 件联调商品 ## 4. 构建体积 -当前生产构建: +当前生产构建(已做 vendor 分包): ```text -dist/assets/index-*.js 886.81 kB │ gzip 289.33 kB -dist/assets/AdminLayout-*.js 36.75 kB │ gzip 12.98 kB -dist/assets/AdminDashboardPage-*.js 179.71 kB │ gzip 58.46 kB -dist/assets/MobileHomePage-*.js 36.96 kB │ gzip 13.37 kB -dist/assets/MobileListingDetailPage-*.js 27.31 kB │ gzip 10.70 kB +dist/assets/index-*.js 493.45 kB │ gzip 160.37 kB +dist/assets/vendor-react-*.js 282.79 kB │ gzip 90.00 kB +dist/assets/vendor-data-*.js 94.07 kB │ gzip 32.30 kB +dist/assets/vendor-mobile-*.js 205.04 kB │ gzip 71.20 kB(仅 /m 路由加载) +dist/assets/Table-*.js 167.71 kB │ gzip 53.93 kB(后台表格按需) +dist/assets/AdminOrdersPage-*.js 45.74 kB │ gzip 14.73 kB +dist/assets/AdminLayout-*.js 36.87 kB │ gzip 13.02 kB ``` -**问题:** 首屏主包仍偏大,超过 Phase 1 目标。 -**原因:** Ant Design 基础组件被首页与后台共享,当前 Rollup 仍把较大依赖合并进 index。 -**下一步:** 在 Phase 1 后续批次做组件级按需、图表库延迟加载、后台页面进一步拆分,并引入包分析工具定位。 +**已优化:** 入口包从 886.81 kB 降到 493.45 kB,`vite build` 不再出现 >700 kB 警告;React、TanStack/Zustand/Axios、antd-mobile 分别拆成可缓存 vendor chunk,AntD Table/Pagination 仍留在后台页面懒加载链路中。 + +**仍可继续:** 当前入口仍包含 AntD 共享基础设施;后续可把 PC 商城与移动端/后台拆成独立入口,进一步缩小 C 端首屏。 --- diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index d5da40e..9963673 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -23,5 +23,25 @@ export default defineConfig({ }, build: { chunkSizeWarningLimit: 700, + rollupOptions: { + output: { + manualChunks(id) { + if (!id.includes('node_modules')) return undefined + if (id.includes('antd-mobile')) return 'vendor-mobile' + if ( + id.includes('react-router') || + id.includes('/react/') || + id.includes('/react-dom/') || + id.includes('/scheduler/') + ) { + return 'vendor-react' + } + if (id.includes('@tanstack') || id.includes('/zustand/') || id.includes('/axios/')) { + return 'vendor-data' + } + return undefined + }, + }, + }, }, })