# Аудит производительности сборки 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)
