【发布时间】:2018-06-03 14:22:58
【问题描述】:
下面是来自this SO 问题的firebase 读取查询性能测试,我只是将其更改为我自己的firebase 实例并删除了顺序测试,只留下了并行测试。
问题是,每当我运行此代码并创建 for 循环 i < 12 导致数组长度为:32,768,我一直收到错误消息,指出调用堆栈超出:RangeError: Maximum call stack size exceeded 但我可以'不知道是什么导致了这个错误......我尝试在 localhost 和云功能上对其进行测试,但没有成功。
(引用的 SO 测试在 i。
function loadVideosParallel(videoIds, callback) {
Promise.all(
videoIds.map((id) => {
return admin.database().ref("test").child(id).once('value')
.then((snapshot) => {
return snapshot;
})
})
).then((r) => callback());
}
function loadVideosForUser(loadVideosParallel, callback) {
admin.database().ref("test").once('value').then((snapshot) => {
var videoKeys = Object.keys(snapshot.val());
for (var i=0; i < 13; i++) {
videoKeys = videoKeys.concat(videoKeys);
}
loadVideosParallel(videoKeys, function() {
if (callback) callback();
});
})
}
let start = Date.now();
loadVideosForUser(loadVideosParallel, function() {
const endTime = (Date.now() - start)+'ms';
console.log('parallel done after '+ endTime +'ms');
});
2017-12-20T23:26:28.527Z E helloWorld: RangeError: 最大调用堆栈 超出尺寸 在 T (/user_code/node_modules/firebase-admin/lib/database/database.js:139:366) 在 /user_code/node_modules/firebase-admin/lib/database/database.js:190:120 在 ta (/user_code/node_modules/firebase-admin/lib/database/database.js:45:40) 在 ua (/user_code/node_modules/firebase-admin/lib/database/database.js:45:89) 在 Ag (/user_code/node_modules/firebase-admin/lib/database/database.js:190:93) 在 /user_code/node_modules/firebase-admin/lib/database/database.js:195:260 在 Oc (/user_code/node_modules/firebase-admin/lib/database/database.js:85:363) 在 Oc (/user_code/node_modules/firebase-admin/lib/database/database.js:85:449) 在 Oc (/user_code/node_modules/firebase-admin/lib/database/database.js:85:449) 在 Nc (/user_code/node_modules/firebase-admin/lib/database/database.js:85:316) 2017-12-20T23:26:29.758741829Z D helloWorld:函数执行已占用 5107 毫秒,完成状态:'crash'
有人有什么见解吗?我尝试查看 /user_code/node_modules/firebase-admin/lib/database/database.js 文件,但它已被缩小,因此无法真正判断发生了什么。
【问题讨论】:
-
如果要查看未混淆的代码:github.com/firebase/firebase-admin-node
-
我在问问题之前看过那里,但那里的 database/database.ts 文件不一样,要短得多。
标签: node.js firebase firebase-realtime-database firebase-admin