Некоторый контекст : я разрабатываю приложение React JS, которое считывает географические точки из базы данных и строит графики / отображает их различными способами. Есть необработанные карты и графики, которые просто показывают данные прямо из базы данных, но есть также графики и метрики, которые включают анализ таких точек, как график уклона, площадь под графиком, гистограммы, евклидово расстояние и т. Д.
У меня настроен клиент GraphQL для передачи мне данных в мое приложение реакции с установленным Apollo-Client. Вот пример ответа GraphQL:
{
"data": {
"Points": [
{
"pid": 13196,
"x": 251.88491821289062,
"y": 374.1650085449219
},
{
"pid": 13197,
"x": 257.6238708496094,
"y": 374.17498779296875
},
{
"pid": 13198,
"x": 264.04315185546875,
"y": 374.5350036621094
},
...etc
]
}
}
Это здорово! Это правильная форма, по крайней мере, для двух разных представлений данных, клиент Apollo кеширует это для меня, используя InMemoryCache
, и мне еще не нужен был редукс.
Дилемма : Куча графиков, которые мне нужны, включает множество производных значений, которые используются повторно (например, я мог бы использовать значения наклона в 2 разных представлениях). Где мне хранить полученные данные?
Прямо сейчас у меня есть все вычисления, встроенные в методы React render()
, но это не очень хорошая идея.
Опции:
- Используйте Redux для полученных данных, поместите все вычисления в редукторы и каким-то образом синхронизируйте их с тем, что находится в кэше Apollo graphql.
- Выполните деривацию на сервере (который я затем смогу кешировать) и отправим оба raw + по сети. Больше сетевого трафика, но меньше вычислений клиента.
- Продолжать вычислять полученные значения внутри
render()
всякий раз, когда изменяются входящие данные graphql.
- Может быть, то, о чем я не думал ...