From 522e8ceee792a45f466705e78039528212fd221f Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Sat, 23 May 2026 18:38:03 +0200 Subject: [PATCH] perf(frontend): split codemirror / jalali / otpauth into lazy vendor chunks Heavy libs (codemirror, persian-calendar-suite, otpauth) and antd's rc-/cssinjs transitive deps used to fall into the catch-all `vendor` chunk and load with every entry point. Give them their own manualChunks groups so they only load with the lazy modal/page that needs them. Initial vendor (catch-all) drops from 1293 kB / 408 kB gzip to 76 kB / 27 kB gzip; codemirror (408 kB / 131 kB gzip) is now on the JsonEditor lazy path instead of the inbounds/clients/index initial load. --- frontend/vite.config.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/frontend/vite.config.js b/frontend/vite.config.js index 5fc6f6c9..2b6b5056 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -174,7 +174,16 @@ export default defineConfig({ manualChunks(id) { if (!id.includes('node_modules')) return undefined; if (id.includes('/node_modules/antd/')) return 'vendor-antd'; - if (id.includes('/@ant-design/icons/')) return 'vendor-icons'; + if (id.includes('/@ant-design/icons/') || id.includes('/@ant-design/icons-svg/')) return 'vendor-icons'; + if ( + id.includes('/node_modules/@rc-component/') + || id.includes('/node_modules/rc-') + || id.includes('/@ant-design/cssinjs') + || id.includes('/@ant-design/colors') + || id.includes('/@ant-design/fast-color') + || id.includes('/@ant-design/react-slick') + || id.includes('/@ctrl/tinycolor') + ) return 'vendor-antd'; if ( id.includes('/node_modules/react-i18next/') || id.includes('/node_modules/i18next/') @@ -184,6 +193,13 @@ export default defineConfig({ || id.includes('/node_modules/react-dom/') || id.includes('/node_modules/scheduler/') ) return 'vendor-react'; + if ( + id.includes('/node_modules/codemirror/') + || id.includes('/node_modules/@codemirror/') + || id.includes('/node_modules/@lezer/') + ) return 'vendor-codemirror'; + if (id.includes('/node_modules/persian-calendar-suite/')) return 'vendor-jalali'; + if (id.includes('/node_modules/otpauth/')) return 'vendor-otpauth'; if (id.includes('dayjs')) return 'vendor-dayjs'; if (id.includes('axios')) return 'vendor-axios'; return 'vendor';