Zimin A.N.
|
11faf086a4
|
perf(admin-ui): manualChunks splits vendor по domain → лучше кэширование
До: 1 chunk index-XXX.js 2 МБ / 703 КБ gzip — любой commit инвалидирует весь.
После: 10 chunks. Vendor стабилен и кэшируется, при правке кода только
main (18 КБ gz) перезагружается:
vendor-react 194 / 60 gz (rare changes)
vendor-tanstack 127 / 40 gz
vendor-forms 145 / 46 gz (react-hook-form + ajv)
vendor-nstart-ui 1229 /465 gz (corp UI — brand assets + stickers)
vendor-icons 62 / 13 gz (phosphor)
vendor-auth 72 / 19 gz (oidc-client-ts + react-oidc-context)
vendor-i18n 56 / 18 gz
vendor-net 42 / 17 gz (axios + crypto)
vendor-misc 15 / 6 gz
index (main) 67 / 19 gz ← наш код
vendor-nstart-ui всё ещё 465 КБ gz — доминирует. Это brand assets
(stickers, lottie animations) которые eager-imported в библиотеке.
Дальнейший win требует tree-shaking в @nstart/ui — отдельная задача.
|
2026-05-05 17:32:33 +03:00 |
|
Александр Зимин
|
1eba2ee59b
|
feat(admin-ui): minimal React+Vite+TanStack scaffolding
- Vite 7 + React 19 + TanStack Router (file-based) + TanStack Query
- Tailwind v4 (CSS-first config, OKLCH brand colors)
- i18next + react-i18next с RU/EN switcher в header
- Axios client с Accept-Language interceptor + JWT placeholder
- 2 pages: /dictionaries (list cards) + /dictionaries/$name (records table)
- Dockerfile (node build + nginx serving + API proxy)
- README + .gitignore
Backend:
- Новый GET /api/v1/dictionaries в read-api (DictionaryListController),
фильтрует по доступному scope через ScopeContext
- DictionaryListItem DTO без heavy schema_json
routeTree.gen.ts — stub; реальное содержимое генерится Vite plugin'ом при
первом 'pnpm dev'.
|
2026-05-04 00:55:04 +03:00 |
|