Firebase - кэширование повышает производительность?

Я создаю веб-приложение с использованием Firebase, которое принимает те же данные и представляет его двумя разными способами - в списке и в качестве маркеров на карте google.

Прямо сейчас, в каждом представлении - карте или списке - у меня есть код для запроса данных из firebase, объединения его и отображения его. Вместо этого я рассматриваю этот план: при запуске, запросите данные, слейте их и сохраните все в массив, который я передаю из представления для просмотра.

В некотором смысле, я "кэширую" данные firebase в массиве. Это не идеально в одном смысле - кэшированные данные не так актуальны, как напрямую запросы Firebase. С другой стороны, я вызываю Firebase только один раз.

Означает ли это смысл работы? Использует ли данные чтения из Firebase в тот же порядок величины, что и данные чтения из массива?

Ответы

Ответ 1

В общем случае кэширование данных для ограничения использования Firebase не требуется. Firebase поддерживает собственный кэш "активных" данных на клиенте. "Активный" определяется как данные, для которых вызов "on" неактивен. Поэтому для любых активных данных любые дополнительные вызовы "on" или "один раз" не потребуют сетевого трафика, поскольку данные уже загружены.

Я не совсем уверен, что вы подразумеваете под запросом firebase. У Firebase нет запросов в традиционном смысле. Он просто имеет методы для присоединения обратных вызовов. Используете ли вы функцию "once()" для периодического получения данных из Firebase? Если это так, это потенциально может быть очень неэффективным. Когда-то это метод удобства и обычно должен использоваться только для данных, к которым обращаются крайне редко или по какой-то причине разработчик не хочет обновляться в режиме реального времени. Если никакие активные вызовы "on" не выдаются, когда один раз() завершается, Firebase будет очищать кеш этих данных, а любые последующие вызовы once() потребуют обратного перехода к серверу.

Если вам нужен способ синхронного доступа к локальной копии последней версии данных эффективным способом, я рекомендую этот метод:

var savedSnapshot = null;
dataRef.on("value", function(snapshot) {
  savedSnapshot = snapshot;
});

//and then when you need to read the data
var theData = savedSnapshot.val()

Поддерживая один единственный вызов on(), Firebase может поддерживать ваши данные в актуальном состоянии, только отправляя deltas по проводу, когда что-то меняется, а не перезагружает все данные каждый раз, когда вам это нужно.