Files
gooseek/AUDIT-PERFORMANCE.md
home 3fa83bc605 feat: статья из Discover, локализация, подсказки
- Статья: заголовок + ссылка (truncate), title в URL, articleTitle в Message
- Локализация Sources, Research Progress, Answer, шагов, formingAnswer
- Подсказки: промпт без жёсткого примера, разнообразие, label 'Что ещё спросить'
- embeddedTranslations, countryToLocale, locale инструкция для LLM

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-21 00:37:06 +03:00

70 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Аудит производительности сборки 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)