首页 > 解决方案 > Firestore,.onSnapshot 取消订阅会阻止页面呈现

问题描述

我在 javascript 中使用 Firebase 和 Firestore 使用 .onSnapshot 实时显示集合(大约 400 个元素):

collectionRef = db.collection('elements').doc(id).collection('subelements')
const unsubscribe = collectionRef.onSnapshot((q)=>{
     // update a elements variable
});

我在检索列表并在它更改时更新它没有问题,但是,当我执行“取消订阅()”以停止接收更新时,我的所有页面冻结了大约 600 毫秒。

在此处输入图像描述

取消订阅本身的调用不会阻塞执行(我猜是异步的),但是在我调用取消订阅后,渲染会在某个时候冻结。这不会发生在较小的集合中,或者如果我不取消订阅它们。

我正在使用 Vue 并取消订阅“beforeDestroy”

更新
类似的性能问题,当在同一个列表上执行 get() 操作时,页面交互会冻结。删除回调上的所有处理并返回一个空数组后:

在此处输入图像描述

标签: javascriptfirebasevue.jsgoogle-cloud-firestore

解决方案


推荐阅读