Знаете ли вы, что такое опрос и как его использовать в React? Давайте углубимся в детали
Иногда в веб-приложении, которое отображает данные, предоставленные серверной службой, мы хотим, чтобы приложение автоматически обновляло данные без необходимости обновления страницы пользователем.
Среди различных методов, которые мы можем использовать для получения результата, мы находим:
- Опрос
- Веб-сокеты
- События, отправленные сервером
В этой статье мы рассмотрим технику опроса.
Что такое опрос? 📖
Опрос — это метод, используемый для многократной проверки обновлений или изменений в ресурсе, таком как серверная служба, база данных или файловая система. Клиент делает периодические запросы к серверу для получения последних данных, вместо того, чтобы ждать, пока сервер отправит обновления клиенту.
Опросы часто используются в ситуациях, когда обновления в реальном времени не являются критически важными или невозможными, например, в приложениях, которые отображают курсы акций, прогнозы погоды или каналы социальных сетей.
Несколько видов опроса
- Опрос с фиксированным интервалом: клиент отправляет запросы на сервер с фиксированным интервалом, например, каждые 5 секунд.
- Экспоненциальный опрос с отсрочкой: клиент экспоненциально увеличивает интервал между запросами каждый раз, когда получает пустой ответ или ответ с ошибкой от сервера. Это помогает предотвратить перегрузку сервера запросами, когда он находится под большой нагрузкой.
- Долгий опрос: клиент отправляет запрос на сервер и держит соединение открытым до тех пор, пока сервер не получит новые данные для отправки обратно. Это уменьшает количество запросов, сделанных клиентом, и снижает нагрузку на сервер.
Давайте создадим пример, используя Redux Saga 🥁
Допустим, у вас есть приложение React, которое отображает список акций и их текущие цены. Вы хотите, чтобы цены обновлялись автоматически, и пользователю не приходилось обновлять страницу.
Вот как вы можете опросить серверную службу для достижения этой цели:
import { takeLatest, put, call, delay } from 'redux-saga/effects'; import { actionTypes, actions } from './actions'; import { fetchStocks } from './api'; function* pollBackendService() { try { const response = yield call(fetchStocks); yield put(actions.pollServiceSuccess(response)); } catch (error) { yield put(actions.pollServiceError(error)); } } function* startPollingStocks() { while (true) { yield delay(5000); // Poll every 5 seconds yield call(pollBackendService); } } function* rootSaga() { yield takeLatest(actionTypes.START_POLLING, startPollingStocks); } export default rootSaga;
В этом примере fetchStocks
— это функция, которая делает запрос к серверной службе. Вместо этого pollBackendService
— это функция-генератор, которая использует эффект call
для вызова fetchStocks
и эффект put
для отправки действий на основе результата запроса. startPollingStocks
— это еще одна функция-генератор, использующая эффект delay
для ожидания 5 секунд между каждым вызовом pollBackendService
. Наконец, rootSaga
— это точка входа в Saga, которая использует takeLatest
для прослушивания действий, запускающих процесс опроса.
Чтобы начать процесс опроса, вы можете отправить действие START_POLLING
из своего магазина Redux:
import { actionTypes, actions } from './actions'; store.dispatch(actions.startPollingStocks());
Выводы 💭
После того, как вы узнали, как объединять данные из серверной службы, вот список плюсов и минусов, которые следует учитывать при принятии этого решения:
Плюсы👍
- Простота реализации. Опрос относительно легко реализовать, особенно по сравнению с более сложными методами связи в реальном времени, такими как веб-сокеты или события, отправленные сервером.
- Резервный механизм. Опрос можно использовать в качестве резервного механизма, когда методы связи в реальном времени не поддерживаются или невозможны.
- Уменьшение нагрузки на сервер. Благодаря таким методам, как длительный опрос, опрос может помочь снизить нагрузку на сервер за счет уменьшения количества запросов, отправляемых клиентом.
- Улучшенный пользовательский интерфейс. Опрос может обеспечить более удобный пользовательский интерфейс за счет автоматического обновления данных без необходимости вручную обновлять страницу.
Минусы👎
- Использование пропускной способности сети. Опрос может потреблять пропускную способность сети, особенно если интервал опроса слишком частый.
- Нагрузка на сервер. Опрос может увеличить нагрузку на сервер, особенно если интервал опроса слишком частый или если одновременно опрашивается много клиентов.
- Задержка. Опрос приводит к задержке, поскольку клиенту приходится ждать следующего интервала опроса, чтобы получить последние данные.
- Неэффективные обновления. Опрос может привести к неэффективным обновлениям, поскольку клиент может повторно получать одни и те же данные, даже если они не изменились.
- Разряд батареи. Опрос может потреблять энергию батареи мобильных устройств, так как при этом сетевое соединение остается открытым и активным.
В целом, опрос может быть полезным методом в определенных ситуациях, но важно использовать его разумно, чтобы избежать его недостатков. Особое внимание следует уделить интервалу опроса, количеству извлекаемых данных и нагрузке на сервер. Во многих случаях более эффективные и масштабируемые методы связи в реальном времени, такие как WebSockets или Server-Sent Events, могут быть лучшим выбором.
Если вам понравилась эта статья, не стесняйтесь нажимать кнопку 👏 столько раз, сколько хотите, это подтолкнет меня к написанию других статей :)