Javascript Firestore、.onSnapshot取消订阅阻止页面呈现

Javascript Firestore、.onSnapshot取消订阅阻止页面呈现,javascript,firebase,vue.js,google-cloud-firestore,Javascript,Firebase,Vue.js,Google Cloud Firestore,我在javascript中使用Firebase和Firestore,使用.onSnapshot: collectionRef = db.collection('elements').doc(id).collection('subelements') const unsubscribe = collectionRef.onSnapshot((q)=>{ // update a elements variable }); 我检索列表并在列表更改时更新它没有问题,但是,当我执行“un

我在javascript中使用Firebase和Firestore,使用.onSnapshot:

collectionRef = db.collection('elements').doc(id).collection('subelements')
const unsubscribe = collectionRef.onSnapshot((q)=>{
     // update a elements variable
});
我检索列表并在列表更改时更新它没有问题,但是,当我执行“unsubscribe()”停止接收更新时,我的页面将冻结大约600毫秒

unsubscribe的调用本身并没有阻止执行(我猜是异步的),但是在我调用unsubscribe之后,渲染会在某个点冻结。这种情况不会发生在较小的收藏中,或者如果我没有取消订阅的话

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

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


如果不确切说明您在onSnapshot处理程序中执行的操作,就不可能诊断出需要花费这么多时间的操作。您可能正在为这400个文档做大量工作。这里描述的性能问题是取消订阅,而不是快照回调。在检索元素(使用get和onSnapshot)时,甚至在删除回调上的所有处理(返回空数组)时,也会出现相同的问题。如果不查看整个项目,就无法跟踪特定的性能问题。如果您确定问题出在Firebase SDK中,那么您应该使用Firebase支持并发送一个(我的意思是最小的)可以重现问题的消息。我将继续深入研究它,与最小的代码进行比较,但我无法思考返回空列表时可能导致的问题。谢谢@DougStevenson