在Firestore中,哪种文档快照字段访问方法更快



我已经成功创建了一个查询来从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可以节省打字时间,但速度不会那么快。然而,它可能足够快,你仍然可能在浪费时间来优化它

底线是:不要花时间优化那些实际上并不缓慢的东西。你可能在这上面花了太多时间,如果速度太慢,以后总是可以改进的。

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

它是速度最快、内存效率最高的,因为没有任何额外的对象创建部分。

最新更新