Кейс · 2026

AI-чат — оптимизация и развитие

Поддержка и развитие большого AI-чат-приложения: десятки моделей, кастомные ассистенты, папки чатов, форматированные сообщения. Работа над производительностью при тысячах сообщений и тяжёлом markdown.

Клиент
Под NDA
Год
2026
Роль
Frontend · Performance · Refactor
Срок
Февраль 2026 — настоящее время
Команда
Solo на фронте
GPT-5.5
⌘K
U
*
U
*
+
Ask anything…
GPT-5.5
U
*
U
*
Message

Контекст

Зрелое чат-приложение с большим набором функций: множество AI-моделей, ассистентов, папки чатов, форматирование сообщений. С ростом продукта появились типичные для масштаба проблемы: бандл прибавил в весе, длинные диалоги проседали в рендере, дубли в зависимостях добавляли килобайты и непредсказуемое поведение.

Решение

Виртуализация списка сообщений и списка чатов с поддержкой динамической высоты ячеек — плавная прокрутка на тысячах элементов любых размеров. Разнёс рендер на слои, чтобы виртуализация корректно работала с переменной высотой контента.

Облегчил тяжёлые компоненты в списках: вынес markdown-функции из ячеек, чтобы они не подгружались при каждом ререндере и не утаскивали в чанк лишнее.

Дедупликация зависимостей: убрал три параллельные библиотеки для работы с датами (оставил одну) и почистил остальной package.json от мёртвых и избыточных пакетов, которые тянулись со старых ревизий и в коде уже не использовались. Минус заметная часть бандла. Поправил дубли логики между серверным state и client-стором, разрулил лишние перерендеры.

Эффект печатающей машинки в стриминге ответов модели. Парсинг буфера обмена из Word, Excel и других редакторов — таблицы и форматирование корректно вставляются в инпут чата без потери структуры.

Стек
ReactTypeScriptZustandTanStack QueryTanStack Virtualreact-markdownVite

Результат

Бандл стал заметно легче за счёт удаления дублей в зависимостях. Длинные диалоги — тысячи сообщений с разной высотой ячеек — рендерятся плавно благодаря виртуализации. Стрим-печать и парсинг clipboard сделали работу со стримом моделей и документами органичнее.