Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Node.js: pagination, cursor-based pagination, offset pagination, streaming, infinite scroll

Какие стратегии пагинации или потоковой передачи данных с сервера существуют?

Вопрос проверяет знание различных подходов к загрузке больших объемов данных с сервера, что критично для производительности веб-приложений.

Короткий ответ

Основные стратегии: offset-пагинация (LIMIT/OFFSET), cursor-based пагинация (по уникальному идентификатору), keyset пагинация (по индексу) и потоковая передача (streaming). Offset проста, но неэффективна при больших смещениях. Cursor-based более производительна и стабильна при изменении данных. Streaming используется для реального времени, например, через WebSockets или Server-Sent Events.

Длинный ответ

Основные стратегии пагинации и потоковой передачи данных

Пагинация и потоковая передача — это способы загрузки больших наборов данных с сервера частями, чтобы избежать перегрузки сети и клиента. Выбор стратегии зависит от требований к производительности, консистентности данных и пользовательского опыта.

Offset-пагинация

Самый простой подход: клиент передает параметры offset (смещение) и limit (количество записей). Сервер выполняет SQL-запрос с LIMIT и OFFSET.

SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 20;

Плюсы: простота реализации. Минусы: при больших смещениях база данных сканирует все строки до offset, что медленно; данные могут дублироваться или пропадать, если между запросами происходят вставки/удаления.

Cursor-based пагинация

Использует уникальный идентификатор (например, id или timestamp) для указания следующей страницы. Клиент передает значение курсора последнего элемента.

SELECT * FROM users WHERE id > last_seen_id ORDER BY id LIMIT 10;

Плюсы: высокая производительность (использует индекс), стабильность при изменении данных. Минусы: сложнее реализовать, не поддерживает произвольный переход на страницу.

Keyset пагинация

Похожа на cursor-based, но использует несколько полей для сортировки. Например, по дате и id.

SELECT * FROM orders WHERE (created_at, id) > ('2023-01-01', 100) ORDER BY created_at, id LIMIT 10;

Эффективна для сложных сортировок, но требует составного индекса.

Потоковая передача (Streaming)

Данные передаются непрерывно по мере готовности. Используется для реального времени: WebSockets, Server-Sent Events (SSE), gRPC streaming. Пример на Node.js с SSE:

app.get('/stream', (req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/event-stream' });
  setInterval(() => {
    res.write(`data: ${JSON.stringify({ time: new Date() })}\n\n`);
  }, 1000);
});

Плюсы: низкая задержка, подходит для лент новостей или чатов. Минусы: требует постоянного соединения, сложнее в масштабировании.

Вывод

Для статических списков (например, каталог товаров) лучше использовать cursor-based пагинацию. Для динамических данных в реальном времени (уведомления, котировки) — потоковую передачу. Offset-пагинация подходит только для простых случаев с небольшими объемами данных.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Node.js

    Node.js

  • Networks

Ключевые слова

#pagination

#cursor-based pagination

#offset pagination

#streaming

#infinite scroll

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию