Какой метод доступа к полям моментального снимка документа быстрее в Firestore? - PullRequest
0 голосов
/ 22 февраля 2020

Я успешно создал запрос для получения данных из Firestore. У меня есть эти данные в моей базе данных:

- products
   - docId
      - name: "bacon"
      - category: "food"
      - price: 44

Когда я запрашиваю, я возвращаю QueryDocumentSnapshot, и я заметил три способа получить значение свойства name. Что быстрее и с большей вероятностью будет использовано?

query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            for (QueryDocumentSnapshot document : task.getResult()) {
                Map<String, Object> map = document.getData();
                String name = map.get("name").toString(); //First option

                String name = document.getString("name"); //Second option

                Product product = document.toObject(Product.class);
                String name = product.getName(); //Third option
            }
        }
    }
});

Ответы [ 2 ]

1 голос
/ 22 февраля 2020

Каждый раз, когда возникает вопрос «что быстрее», ответ всегда «вы должны сравнить их, чтобы получить реальные цифры».

Но я скажу, что практическая разница между первыми двумя вариантами незначителен. Оба они по существу являются постоянными поисками по карте времени. Вы можете попытаться сравнить их, но они будут настолько быстрыми, что на практике это не будет иметь значения. По моему мнению, вам не следует тратить время на их оптимизацию.

Третий вариант всегда будет самым медленным, потому что Firestore SDK должен будет отразить объект вашей модели, чтобы найти все методы установки. или опубликуйте c поля для сопоставления данных поля документа. Это самое удобное. Вы сэкономите время, используя toObject, но это будет не так быстро. Тем не менее, он, вероятно, будет достаточно быстрым, и вы все еще можете тратить свое время на его оптимизацию.

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

1 голос
/ 22 февраля 2020
 String name = document.getString("name"); //Second option 

Это самая быстрая и эффективная память, потому что нет никакой дополнительной части создания объекта.

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