Р
Разработка Riseonly
@nicsbar345 подп.
212просмотров
61.4%от подписчиков
15 февраля 2026 г.
Score: 233
------------ Реакции и упоминания в чате: У сообщения рисуем чипы реакций и кто поставил. Нажал на реакцию сразу обновляем UI оптимистично через buildAddPatch и saiUpdater в кэш getMessages, потом с бэка прилетает событие reaction_added или reaction_removed и подставляем актуальные данные. Так и мгновенный отклик и правильное состояние после. Непрочитанные реакции на твои сообщения показываем в кружочке, при заходе в чат дергаем markReactionsAsReadForMessage. Упоминания в группах: флаг is_mentioned_you, экран или список упоминаний с пагинацией, при открытии чата или раздела отмечаем прочитанным. Всё завязано на события с бэка и кэш, без лишних запросов, причем помечается и идет запрос только тогда если есть сообщение в области видимости списка. При нажатии на непрочитанные ентити, мы наводимся пока сообщение не встанет по центру, если же этого message id нету в спсике то вызываем get_messges, и как только получаем сообщения то показываем анимацию того как резко идем вверх и заменяем старые список на новый из ответа get_messages где переданный message id стоит в центре и вокруг него сверху половина и снизу половина -1 (для ровности) ведь например если лимит 50 то 25 / 1 / 24 = 50 Ну и так-же реализована система батчинга если у тебя например 20 непрочитанных сообщений представим в одной области видимости, то мы их всех собираем в один массив и делаем один запрос для пометки их прочитанными, для того чтобы не делает по 20 запросов на каждый из них, при этом сервер максимум может принять 100 message id для прочтения для мемори безопасности. ------------ Парсер текста сообщений: Текст в сообщении это не просто строка. Там бывают ссылки, @теги, жирный, курсив, код. Надо резать на сегменты и рендерить по-разному, ссылки и теги кликабельные. Сделал один парсер parseText: сначала вытаскиваем блоки кода в тройных кавычках чтобы внутри не путать разметку, потом по тексту идём слева направо и ищем что раньше встречается жирный, курсив, зачёркнутый, инлайн-код, ссылка, почта, тег. Выбираем самый левый матч, записываем сегмент, идём дальше. Один проход без конфликтов. Один раз написал и использую везде где нужен такой текст в чатах, постах, комментариях. Удобно. ------------ Превью ссылок на мобилке: Когда бэк в link-preview-service докачал страницу и сделал превью, он шлёт событие link_preview_ready с заголовком, описанием и картинкой. Мы ловим в event-services, находим в кэше сообщений чата нужное сообщение по message_id и через saiUpdater подставляем ему link_preview. Список на экране обновляется и карточка появляется без перезапроса чата. Компактный или большой вариант, цвета от чата. Всё автоматически. ------------ Оптимизация чатов Были огромные проблемы с оптимизацией в списке сообщений, да и сейчас чуть чуть есть. Меня ужасно бесило что когда я просто тупо скролился то UI фпс падал до 30 а JS фпс падал до 1-5. Я создал отдельный конфиг чтобы выключать или включать различный функционал в списке сообщений, и это оч помогло быстро найти проблему. Оказывается проблема была с контекстным меню, на каждое сообщение висели свои js воркеры и это сильно било по перфомансу. После ее исправления, качество контекстным меню стало гораздо хуже, но я думаю в будущем еще успею это исправить, пытался еще нативку использовать но там полный пздц с гибкостью, не устраивает крч да и банально скиллов сфивта не хватает наверное. В общем сейчас всё плавно и UI стабильно держит 60 фпс а js иногда может опускаться до 55 но это вообще пофиг. ------------
212
просмотров
3498
символов
Нет
эмодзи
Нет
медиа

Другие посты @nicsbar

Все посты канала →
------------ Реакции и упоминания в чате: У сообщения рисуем — @nicsbar | PostSniper