我已经成功创建了一个查询以从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
}
}
}
});
最佳答案
每当出现“更快”的问题时,答案总是“您应该对它们进行基准测试以获得实际数字”。
但是,我会说前两种选择之间的实际差异可以忽略不计。它们本质上都是恒定的时间图查询。您可以尝试对它们进行基准测试,但是它们都将是如此之快,因此在实践中并不重要。我认为您不应该花时间尝试优化它们。
第三个选项总是最慢的,因为Firestore SDK将必须对模型对象执行反射,以找到所有的setter方法或公共字段以映射文档字段数据。这是最方便的。您将使用toObject节省键入时间,但速度不会如此之快。但是,它可能足够快,并且您可能仍在浪费时间尝试对其进行优化。
底线是:不要花时间优化一些实际上并不能衡量缓慢的东西。您可能会花太多时间在上面,如果它太慢,可以随时对其进行改进。