Skip to content

Latest commit

 

History

History
37 lines (24 loc) · 3.03 KB

File metadata and controls

37 lines (24 loc) · 3.03 KB

PRD: NewsFeed Dynamic (Deep Virtualization Study)

1. Цель проекта

Разработка учебного приложения «Лента новостей» с бесконечным скроллом, поиском и сложным медиа-контентом. Основной фокус — глубокая проработка алгоритмов виртуализации для элементов с динамической высотой.

2. Ключевые функции

2.1. Виртуализированный список

  • Динамический расчет высоты: Рендеринг элементов, размер которых зависит от длины текста и загруженных медиа (картинки/видео).
  • Кэширование геометрии: Сохранение рассчитанных высот для каждого id поста.
  • Scroll Anchoring: Удержание позиции скролла при изменении контента внутри элементов (например, при разворачивании текста).

2.2. Поиск и фильтрация

  • Global Search: Полнотекстовый поиск по ленте (через бэкенд).
  • Reset & Re-calculate: Полный сброс виртуализированного списка и кэша высот при обновлении поискового запроса.
  • Highlighting: Подсветка найденных слов внутри виртуализированных карточек.

2.3. Контентные блоки

  • Медиа: Картинки с разными соотношениями сторон и видео-плееры.
  • Интерактив: Кнопка «Показать больше» (expand) для длинных текстов, меняющая высоту карточки «на лету».

3. Технологический стек

  • Backend: NestJS (Node.js framework), TypeORM (Data Mapper pattern).
  • Database: PostgreSQL (хранение 10,000+ постов для тестов).
  • Frontend: React.js, TypeScript, Vite (сборщик).
  • State Management: React Hooks (useRef, useMemo, useCallback) — фокус на минимизации ререндеров.

4. Технические вызовы (Deep Dive)

  • Intersection Observer vs Scroll Event: Выбор оптимального способа отслеживания видимых элементов.
  • Resize Observer: Отслеживание изменений размера карточки (например, при загрузке картинки или ресайзе окна).
  • Batching: Логика подгрузки данных с бэкенда (Chunking) для обеспечения бесшовности.