Я разрабатываю PWA, который отображает список транзакций (транзакция - это объект с ~ 10 полями). Я использую Firestore для хранения и обновлений в реальном времени, и у меня также включено постоянство .
Я хочу, чтобы в моем приложении были все данные в памяти, и я хочу, чтобы отображение только необходимой информациисам (например, используя виртуальную прокрутку для списка транзакций). По этой причине я слушаю всю коллекцию (так называемые транзакции).
В начале приложения я хочу убедиться, что данные загружены, поэтому я использую один раз кэш запрос для получения транзакций. Я ожидал бы, что запрос будет почти мгновенным, но на ноутбуке требуется около 1 секунды, чтобы получить исходные данные (и у меня также есть другая коллекция, которую я извлекаю из кэша, и она разрешается через ~ 2 секунды послезапрос транзакций). Для мобильных устройств это занимает около ~ 9 секунд ( загрузка на мобильный , загрузка на ноутбук )
Я хочу свое приложениечтобы чувствовать себя мгновенно, но мне нужно несколько секунд, пока данные на месте. Обратите внимание, что я не выполняю никаких дополнительных запросов (я просто хочу загрузить данные в память).
Я что-то не так делаю? Я прочитал документы Firestore, но я неНе думаю, что объем данных, которые у меня есть в кеше, должен вызывать такую плохую производительность.
ОБНОВЛЕНИЕ: Даже если я ограничу первоначальный запрос только 20 документами. Для их получения все еще требуется ~ 2 секунды.
ОБНОВЛЕНИЕ 2: Код выглядит следующим образом:
export const initializeFirestore = (): Thunk => (dispatch) => {
const initialQueries: Array<Promise<unknown>> = []
getQueries().forEach((query) => {
const q = query.createFirestoneQuery()
initialQueries.push(
q
.get({
source: 'cache',
})
.then((snapshot) =>
dispatch(firestoneChangeAction(query, snapshot, true)),
),
)
q.onSnapshot((change) => {
dispatch(firestoneChangeAction(query, change))
})
})
console.log('Now I am just waiting for initial data...')
return Promise.all(initialQueries)
}