【发布时间】:2021-11-22 12:06:19
【问题描述】:
我们的应用程序中有一个布局,供用户应用程序处理事件。我们在 v-for 循环中列出这些应用程序。然而,我们确实需要从我们的用户集合中引用一些关于该布局的额外数据。我们可以通过过滤用户集合来实现这一点,但这太慢了。
这是有效的代码,但速度太慢(有 20K 用户),网站无法使用。
<span v-for="u in filteredInfo(props.row)">
<span v-if="u && u.skills && u.skills.length > 0" style="display:inline;">
<v-popover>
<i class="fad fa-briefcase"></i>
<template slot="popover">
<span v-for="z in u.skills">{{z.title}} / </span>
</template>
</v-popover>
</span>
</span>
</span>
然后:
filteredInfo(user) {
return this.users.filter(member => {
return member.id == user.userId
})
}
如果我正确理解发生了什么,我的 v-for 循环中的每个应用程序都必须过滤 20K 用户以查找并加载正确的用户数据……在这种情况下,列出他们的技能。
为了加快这个布局的性能,直接调用用户数据不是更有帮助吗?这是我要开始工作的代码,但它没有显示 v-for 循环中的数据。
filteredInfo(user) {
fb.usersCollection.doc(user.userId).get()
.then(doc => {
console.log(doc.data());
return doc.data()
})
}
我的第二种方法(以上)会加快页面速度吗?如果是这样,我需要做什么才能使其正常工作?
谢谢!
【问题讨论】:
-
v-for 中使用了哪个
filteredInfo()函数? -
第一个有效,只是网站变得非常慢。我想让它更快的想法是使用第二个代码,但它不起作用。
-
在第一个函数中,假设Id是唯一的,为什么不使用
find()呢? -
喜欢这个?返回 this.users.find(member => { return member.id == user.userId })
-
是的,但您真的需要一次列出所有用户吗?分页始终是一种选择。
标签: javascript firebase vue.js google-cloud-firestore