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

3.9 KiB
Raw Blame History

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

Средний приоритет

  1. Lazy-загрузка провайдеров — вынесено в config/providersLoader.ts, загрузка только при !env-only
  2. Turbopack на production build — Next.js 16 использует Turbopack по умолчанию (next build без флагов)

Долгосрочно

  1. pdf-parse: динамический import — выполнен. pdf-parse (83 MB) загружается только при парсинге PDF, не при старте. Worker через child_process не реализован из‑за ограничений Turbopack (статический анализ путей fork).
  2. Миграция better-sqlite3 → libsql — отложено: требуется переписать src/lib/db/migrate.ts (см. CONTINUE.md)