# Аудит производительности сборки GooSeek ## Основная причина медленной загрузки ### 1. Явное использование Webpack вместо Turbopack (КРИТИЧНО) **Проблема:** В `package.json` скрипт `dev` использует `next dev --webpack`, что отключает Turbopack. **Влияние:** - Turbopack: cold start ~1.1s, HMR ~90ms - Webpack: cold start ~4.2s, HMR ~800ms - **Разница: до 4× медленнее старт, до 10× медленнее обновления** **Решение:** Убрать флаг `--webpack` — Next.js 16 по умолчанию использует Turbopack. --- ### 2. Тяжёлые зависимости (размер в node_modules) | Пакет | Размер | Где используется | Загрузка | |------------------|--------|-------------------------------------------|-------------------| | pdf-parse | 83 MB | uploads/manager.ts (парсинг PDF) | Server, API | | @huggingface | 49 MB | TransformersProvider (embeddings в браузере) | Динамический import | | jspdf | 31 MB | Navbar.tsx (экспорт чата в PDF) | Клиент, при экспорте | | mathjs | 16 MB | calculationWidget (агент расчётов) | Server, API | | better-sqlite3 | 12 MB | drizzle/db (native addon) | Server | | lightweight-charts | 3 MB | Stock.tsx (графики акций) | Клиент, при виджете | --- ### 3. Цепочка импортов при загрузке layout ``` layout.tsx → configManager (config/index.ts) → getModelProvidersUIConfigSection (models/providers/index.ts) → ВСЕ 9 провайдеров: OpenAI, Ollama, Timeweb, Gemini, Transformers, Groq, Lemonade, Anthropic, LMStudio ``` **Проблема:** Даже в env-only режиме (Timeweb) при каждом запросе загружаются все провайдеры для конфигурации UI. Webpack/Turbopack анализирует весь граф зависимостей. **В env-only:** `getModelProvidersUIConfigSection` не вызывается, но импорт выполняется при загрузке модуля config. --- ### 4. Нативные модули - `better-sqlite3` — компилируется при установке, замедляет `npm install` - `@napi-rs/canvas` (optional) — для pdf-parse --- ## Рекомендации по оптимизации ### Быстрые (сделать сейчас) 1. ✅ **Убрать `--webpack`** — выполнено (убран из `build`, dev уже без него) 2. ✅ **Динамический import для jsPDF** — уже реализовано в Navbar.tsx 3. ✅ **Динамический import для Stock (lightweight-charts)** — уже реализовано в Renderer.tsx ### Средний приоритет 4. ✅ **Lazy-загрузка провайдеров** — вынесено в `config/providersLoader.ts`, загрузка только при !env-only 5. ✅ **Turbopack на production build** — Next.js 16 использует Turbopack по умолчанию (`next build` без флагов) ### Долгосрочно 6. ✅ **pdf-parse: динамический import** — выполнен. pdf-parse (83 MB) загружается только при парсинге PDF, не при старте. Worker через child_process не реализован из‑за ограничений Turbopack (статический анализ путей fork). 7. **Миграция better-sqlite3 → libsql** — отложено: требуется переписать `src/lib/db/migrate.ts` (см. CONTINUE.md)