Как играть с Firebase, сохраняя контроль над пропускной способностью

После нескольких недель работы с Firebase и небольшого количества вопросов «Что, черт возьми?» Я собрал несколько простых советов, которые помогут вам сэкономить трафик.

Сейчас они могут показаться очевидными, но не тогда, когда мы начали работать с Firebase.

Подружитесь с инструментом профилирования базы данных

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

Чем раньше вы его воспользуетесь, тем лучше для вашего приложения (и для вашего душевного спокойствия;)).

Подробнее о профилировщике читайте в официальной документации.

Включить локальное кеширование

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

Подробнее об офлайн-возможностях читайте в официальной документации.

Индексируйте ваши данные

Если вы часто фильтруете или упорядочиваете данные на основе определенного поля, вам следует подумать о добавлении к нему индекса. Эта простая операция не только улучшит производительность ваших запросов, но и сэкономит полосу пропускания, потому что для неиндексированных запросов клиент загружает все данные для данного узла и только затем выполняет запрос на нем.

Подробнее об индексировании данных читайте в официальной документации.

Убедитесь, что вы используете правильный слушатель, который слушает соответствующий узел

Firebase предоставляет вам два типа слушателей:

  • слушатели значений, которые позволяют вам отслеживать изменения в данном узле (и его дочерних элементах)
  • дочерние слушатели (дочерний элемент добавлен, дочерний элемент изменен, дочерний элемент удален, дочерний элемент перемещен), что позволяет вам отслеживать изменения в дочерних элементах данного узла

Похоже, они делают то же самое, а? Не совсем.

Так в чем разница?

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

Дочерний прослушиватель запускается каждый раз, когда дочерний элемент на данном узле добавляется, изменяется, удаляется или перемещается, и возвращает только данные обработанного дочернего элемента.

Какой вывод?

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

Подробнее о получении данных читайте в официальной документации.

Избегайте загрузки данных, когда они вам не нужны

Когда вы записываете данные через REST API, Firebase возвращает ответ, содержащий данные, которые вы только что отправили. В большинстве случаев вам, вероятно, не нужно получать эти данные.

Чтобы предотвратить загрузку всего вывода, просто добавьте print = silent в параметры запроса. С этого момента сервер будет возвращать код состояния 204 No Content.

Подробнее о параметре печати читайте в официальной документации.

Последний, но тем не менее важный

Всегда внимательно читайте документацию;)

У вас есть другие советы? Не стесняйтесь оставлять их в комментариях. Будет здорово об этом поговорить :)