- Статья: заголовок + ссылка (truncate), title в URL, articleTitle в Message - Локализация Sources, Research Progress, Answer, шагов, formingAnswer - Подсказки: промпт без жёсткого примера, разнообразие, label 'Что ещё спросить' - embeddedTranslations, countryToLocale, locale инструкция для LLM Co-authored-by: Cursor <cursoragent@cursor.com>
3.9 KiB
3.9 KiB
Аудит производительности сборки 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
Рекомендации по оптимизации
Быстрые (сделать сейчас)
- ✅ Убрать
--webpack— выполнено (убран изbuild, dev уже без него) - ✅ Динамический import для jsPDF — уже реализовано в Navbar.tsx
- ✅ Динамический import для Stock (lightweight-charts) — уже реализовано в Renderer.tsx
Средний приоритет
- ✅ Lazy-загрузка провайдеров — вынесено в
config/providersLoader.ts, загрузка только при !env-only - ✅ Turbopack на production build — Next.js 16 использует Turbopack по умолчанию (
next buildбез флагов)
Долгосрочно
- ✅ pdf-parse: динамический import — выполнен. pdf-parse (83 MB) загружается только при парсинге PDF, не при старте. Worker через child_process не реализован из‑за ограничений Turbopack (статический анализ путей fork).
- Миграция better-sqlite3 → libsql — отложено: требуется переписать
src/lib/db/migrate.ts(см. CONTINUE.md)