@pavelkunyavskiy

Как правильно периодически обнулять state? Как избежать излишних запросов на API сервер?

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

if (!store.state.articles.length) {
  axios.get...
  store.commit('SET_ARTICLES', data)
}


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

Как это правильно делать? И какие есть другие способы? Может быть как-то по другому запрашивать надо, или еще какие практики неведомые мне.
  • Вопрос задан
  • 448 просмотров
Пригласить эксперта
Ответы на вопрос 2
kulakoff
@kulakoff Куратор тега Vue.js
Vue.js developing
1. Периодический запрос на сервер
2. Вебсокеты, если нужно в реальном времени получать данные
Ответ написан
markmariner
@markmariner
Вам стоит настроить бекэнд таким образом, чтобы он возвращал статус 304 Not Modified, если данные не изменились.

То есть вы каждый раз (« при каждом переходе по роуту») отправляете запрос на сервер. Если данные изменились, то сервер возвращает вам новые данные, если нет — возвращает пустой ответ со статусом «Без изменений». Как именно это сделать — задача бекэнд-разработки.

Здесь подробнее на эту тему: https://ruhighload.com/post/%D0%9A%D0%B5%D1%88%D0%...

Если вам нужно обновление без перехода на другую страницу мгновенно (например для сообщений в чате), то вам необходимо использовать протокол WebSockets, с помощью которого вы будете подписываться на изменений, а бекэнд будет самостоятельно уведомлять фронтенд об изменении данных. Материалов о вебсокетах много, реализация зависит от языка. Про JS: https://learn.javascript.ru/websockets

Можно настроить простое кеширование на бекэнде — запрос будет обрабатываться, но обращения к БД не будет происходить, таким образом не страшно, что вы будете отправлять запросы часто.

Периодические (по таймеру) запросы на сервер — самое неэлегантное решение, использовать его не стоит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы