Краткий ответ: Конечно, есть преимущество в разделении запросов, но оно заключается в улучшении работы ваших пользователей и может быть достигнуто только с правильно настроенным InMemoryCache.
Результаты запросов в Apollo нормализованы:
InMemoryCache нормализует ваши данные перед сохранением их в хранилище, разбивая результат на отдельные объекты, создавая уникальный идентификатор для каждого объекта и сохраняя эти объекты в плоской структуре данных.По умолчанию InMemoryCache будет пытаться использовать часто встречающиеся первичные ключи id и _id для уникального идентификатора, если они существуют вместе с __typename в объекте.
Если вы не видите такое поведение с вашимпользовательский запрос, вероятно, потому что ваше поле идентификатора называется uid
, а не id
или _id
.Вам необходимо реализовать пользовательскую функцию dataIdFromObject , как описано в документации :
import { InMemoryCache, defaultDataIdFromObject } from 'apollo-cache-inmemory'
const cache = new InMemoryCache({
dataIdFromObject: object => {
switch (object.__typename) {
// or whatever your user type is called
case 'User': return `${object.__typename}:${object.uid}`
// other types here that don't have an id or _id
default: return defaultDataIdFromObject(object)
}
}
})
Правильно настроенный кэш означает две вещи в контексте вашего вопроса:
- Запросы, извлекающие объект с тем же ключом кеша, объединят их результаты.
- Мутации, которые возвращают объект, соответствующий существующему ключу кеша, автоматически обновят этот объект.
Это означает, что вы можете разделить ваш запрос user
и запросить минимальное количество полей для первоначальной загрузки вашей страницы и отложить запрос остальных полей, пока пользователь не перейдет на страницу, где эти поля необходимы.Вы можете даже использовать предварительную выборку , чтобы получить второй запрос раньше времени.
Кроме того, если у вас есть мутация, которая обновляет пользователя, если мутация возвращает объект, имеющий совпадающийключ кеша (т.е. в данном случае он включает guid
), он автоматически обновит кеш для этого объекта.В этих случаях нет необходимости повторно запрашивать или обновлять хранилище вручную - Apollo все это обработает за вас.
Примечание: списки объектов в кеше не затрагиваются вышеизложенным.Если в результате мутации что-то должно быть добавлено или удалено из списка, Apollo не сможет определить, какие списки были затронуты.В этих случаях вы обновите кеш самостоятельно .
Разделение запросов может ускорить работу вашего приложения и повысить удобство работы пользователей, но не должно влиять на объем памяти или сложность.обновления кеша после мутации из-за того, как работает кеширование в Apollo.