我们的应用程序需要从模型中的所有对象中提取一组属性。我们的应用程序将从叶节点连接属性与父节点的属性。
我们使用大约20K节点和大约5个属性调用getBulkProperties()方法。这运行了一段时间,然后我们收到服务器错误,并且永远不会调用回调。
我们应该使用限制吗?我们应该用最多X个节点来分割这些调用吗?
任何帮助都会受到赞赏,因为这会导致我们的应用程序挂起。
谢谢!
答案 0 :(得分:0)
我认为没有限制,但您可以考虑一次列出特定组的属性,或者只考虑叶子节点。
此blog post显示了如何优化搜索性能,以及下面的代码(from this post)如何与 .getBulkProperties 集成:
viewer.search('Steel',
function(dbIds){
viewer.model.getBulkProperties(dbIds, ['Mass'],
function(elements){
var totalMass = 0;
for(var i=0; i<elements.length; i++){
totalMass += elements[i].properties[0].displayValue;
}
console.log(totalMass);
})
}, null, ['Material'])
您还可以考虑在模型上仅使用叶子,如this post及以下所示:
function getAllLeafComponents(viewer, callback) {
var cbCount = 0; // count pending callbacks
var components = []; // store the results
var tree; // the instance tree
function getLeafComponentsRec(parent) {
cbCount++;
if (tree.getChildCount(parent) != 0) {
tree.enumNodeChildren(parent, function (children) {
getLeafComponentsRec(children);
}, false);
} else {
components.push(parent);
}
if (--cbCount == 0) callback(components);
}
viewer.getObjectTree(function (objectTree) {
tree = objectTree;
var allLeafComponents = getLeafComponentsRec(tree.getRootId());
});
}