реагировать: всегда получать данные или сохранять данные

Итак, я работаю над проектом IoT SaaS в React. Пользователь выбирает датчик и временной диапазон и получает данные, визуализированные в виде графиков с разрешением около 5 минут. Мой вопрос касается лучших практик обработки выборки и сохранения этих данных во внешнем интерфейсе. Я пробовал всегда извлекать, что работает нормально, но делает систему медленной. Это особенно актуально, когда пользователи быстро переключаются между датчиками. Я также пытался сохранить данные, как json в состоянии реакции. Это значительно повышает производительность, но имеет массу других проблем. Браузер начинает жаловаться на использование оперативной памяти и иногда может выходить из ошибок памяти. Существует также много необходимой обработки данных, например, сохранение нескольких непрерывных диапазонов данных для одного и того же датчика, обнаружение и объединение перекрытий диапазонов дат и т. д.

Итак, мне интересно, что здесь лучше всего, должен ли я всегда получать или сохранять на интерфейсе? Существуют ли какие-либо фреймворки, которые я мог бы использовать, помогая мне с интерфейсом обработки данных, или мне нужно делать это вручную.


person Håkon Halldal    schedule 11.11.2019    source источник
comment
хм, я не знаю, что лучше всего подходит для этого случая, но мне кажется неправильным постоянно получать данные или сохранять данные во внешнем интерфейсе ... как вы упомянули, браузер / ПК будет жаловаться. Вы пытались передать данные? По сути, сохранить все с точки зрения бэкэнда и транслировать с помощью интерфейса?   -  person CrissCrossCrass    schedule 11.11.2019


Ответы (1)


Сохранение всех данных во внешнем интерфейсе — это антипаттерн. Из-за проблем с памятью и рассинхронизацией. Чтобы ваша система работала быстрее и использовала серверные данные, вы можете попробовать следующее:

  1. Оптимистичный ответ. Этот метод использует некоторые упрощенные части внутренней логики во внешнем интерфейсе при выполнении фактического запроса. Таким образом, пользователь увидит результат до того, как серверные данные достигнут браузера. Допустим, вы выполняете операцию +1 на бэкэнде. Пользователь отправляет номер 2 для выполнения этой операции. Итак, в вашем интерфейсе вы можете использовать что-то const optimisticResponse = (userData) => userData + 1. И затем, когда вы получаете данные из бэкэнда, вы можете перезаписать значение, необходимое
  2. GraphQL позволяет сократить накладные расходы, запрашивая у серверной части только те данные, которые вам нужны.
person Dima Vishnyakov    schedule 11.11.2019