gpt4 book ai didi

javascript - 如何使用 Firebase/Node.js 遍历大型数据集?

转载 作者:行者123 更新时间:2023-11-30 07:57:54 24 4
gpt4 key购买 nike

目前我正在使用 Fireproof 使其基于 promise ,这​​就是我所拥有的:

fbase.child("questions").once("value").then(function(questionsSnapshot) {
return questionsSnapshot.forEach(function(questionSnapshot) {
return console.log(questionSnapshot.val());
});
});

但是问题是巨大的。 20,000 多条记录。不确定 - 有更好的方法吗?

最佳答案

如果我理解正确的话,这个问题实际上是关于 Node 中的迭代性能,而不是与 Firebase 有任何关系。问题是,一旦您拥有 20000 多个对象数组,遍历它们并对每个对象执行操作的最佳方法是什么?

您可以进行一些可能的性能优化。首先,您可以使用 for 循环而不是 Array.prototype.forEach(),这 tends to be faster对于非常大的阵列。

...
var len = questionsSnapshot.length;
for (var i = 0; i < len; i++) {
console.log(questionsSnapshot[i].val());
}

或者,使用 ES6 for...of语法:

for (let question of questionsSnapshot) {
console.log(question.val());
}

但是,在使用 console.time() 的快速测试中在 20000 个对象数组上的 Node 中,我注意到没有一致的性能提升。事实上,Array.prototype.forEach() 通常比使用 for 循环更快。

您可能进行的其他优化是将传递给 forEach() 的嵌套回调移动到模块范围内。这样,它只会被创建一次,而不是每次调用其父函数时都重新创建。

fbase.child("questions").once("value").then(function(questionsSnapshot) {
return questionsSnapshot.forEach(logValue);
});

function logValue(questionSnapshot) {
return console.log(questionSnapshot.val());
}

但是,如果您对父函数进行多次调用,即如果经常执行 Firebase 查询,这只会带来显着的性能提升。在我看来,问题更多的是关于在已经拥有大型数组后对其进行迭代,而不是多次执行相同的查询。

所以,如果你想对数组中的每一项执行操作,我认为你正在做的很好。 20000 个对象并没有那么大;在我那台不起眼的电脑上遍历这样一个数组大约需要 5 毫秒。事实上,无论您对每个项目执行什么操作,都可能比遍历数组花费更长的时间。

如果您注意到性能有特别的滞后,您可能需要通过编辑您的帖子来详细说明。否则,我建议不要担心。

关于javascript - 如何使用 Firebase/Node.js 遍历大型数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35518479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com