Следует ли обновлять элементы Firstore в AngularFire через AngularFirestoreCollection? - PullRequest
0 голосов
/ 07 октября 2019

В моем приложении у меня есть список, который требует условия "или". Но, как говорят документы :

В этом случае вы должны создать отдельный запрос для каждого условия ИЛИ и объединить результаты запроса в вашем приложении.

В результате в моем сервисе я управляю двумя запросами и отображаю их как единый наблюдаемый список для потребителей.

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

myCollection.doc(item.id).update(item);

или я могу сделать это намного проще и проще:

angularFirestore.doc(`path/to/${item.id}`).update(item);

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

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

Кто-нибудь знает, правильно ли вышеприведенное? Должен ли я выполнять дополнительную работу, чтобы писать через ссылки на коллекцию, или angularfire (и / или firestore) справляется с этим и делает их фактически той же самой операцией под капотом?

1 Ответ

1 голос
/ 07 октября 2019

AngularFire2 - это тонкая оболочка для RxFire, которая сама по себе является относительно тонкой оболочкой для Firebase JavaScript SDK.

Не должно быть существенной разницы в производительности между обновлением документа через AngularFire или его обновлением напрямую через JavaScriptSDK. В обоих случаях большая часть времени проводится в JavaScript SDK и по проводам между клиентом и сервером. По этой причине я обычно обновляюсь напрямую через JavaScript SDK, поскольку он часто немного более прямой, а абстракция AngularFire не дает мне большого преимущества в операциях записи. Учитывая, что AngularFire построен на основе этого SDK, он мгновенно фиксирует изменения, даже если они не были сделаны через AngularFire.

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

...