Как выбрать чтение из Cloud Firestore, используя состояние React? - PullRequest
1 голос
/ 31 мая 2019

Я работаю над одностраничным приложением, которое использует React и Firebase.И база данных - Cloud Firestore.

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

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

Потому что сейчас У меня есть следующий код в основном для каждого компонента, который отображает продукты (один продукт или список продуктов):

  • Хук useEffect(), извлекающий продукты из Firestore, который запускается при монтировании компонента.

ProductPage.js

https://www.mywebsite.com/product/product-slug

useEffect(() => {
  firebase.firestore().collection('products').where('slug', '==', 'product-slug').get()
  .then((querySnapshot) => {
    // STORE RESULT IN STATE
  });
},[]);

CategoryPage.js

https://www.mywebsite.com/category/someCategory

useEffect(() => {
  firebase.firestore().collection('products').where('category','==','someCategory').get()
    .then((querySnapshot) => {
      // STORE RESULT IN STATE
   })
},[]);

Представьте, что пользователь перемещается по следующим маршрутам:

  • Проходит по маршруту category1, который отображает 20 товаров на странице, и просматривает страницы 1, 2 и 3. Всего 60 операций чтения.
  • Клики понекоторый продукт на странице 3 и проверяет страницу продукта для этого конкретного продукта. Всего 1 чтение.
  • Теперь он снова щелкает по меню category1 и снова просматривает страницы 1, 2 и 3. Всего 60 чтений.

Результат:

Мой пользователь сделал 121 чтение по тем же 60 документам.

ПРИМЕЧАНИЕ: компонент отключается при изменении маршрута, поэтому useEffect будет работать снова, когда они вернутся на тот же маршрут, даже если они уже посещали его.

КакМожно ли оптимизировать это?

То, о чем я думал до сих пор, это:

Примечание: это не огромное количество продуктов, например, всего 1000, максимум.

OPTION # 1

Каждый раз, когда пользователь выполняет запрос к категории продукта, я запрашиваю эту полную категорию и сохраняю ее в состояние в компоненте более высокого уровня, например App.js .Если он собирается снова запросить ту же категорию, я проверю, есть ли у меня ее состояние, и верну ее.Это как слой кеширования, использующий состояние React.

OPTION # 2

Возможно настроить прослушиватель для этого запроса в компоненте более высокого уровня, например App.js .Будет работать очень похоже на вариант № 1, потому что мне также придется сохранить результат в состоянии.

Есть ли лучший метод или шаблон для оптимизации для чтения в такой ситуации?

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