我使用this plugin來顯示一棵樹。引導樹視圖性能問題
是否有任何功能會檢查父節點時檢查所有子節點?
目前我找不到任何方式來做到這一點。
爲了實現這個功能我已經寫遞歸函數找到根下的每個節點,並檢查使用checkNode
功能。
我看到的性能問題時,樹的深度超過3大約150個節點。在調查中發現checkNode
功能bootstrap-treeview.js
使用render
每次檢查節點時,誰能告訴我使用這個render
函數?
我們可以刪除使用render
?
我使用this plugin來顯示一棵樹。引導樹視圖性能問題
是否有任何功能會檢查父節點時檢查所有子節點?
目前我找不到任何方式來做到這一點。
爲了實現這個功能我已經寫遞歸函數找到根下的每個節點,並檢查使用checkNode
功能。
我看到的性能問題時,樹的深度超過3大約150個節點。在調查中發現checkNode
功能bootstrap-treeview.js
使用render
每次檢查節點時,誰能告訴我使用這個render
函數?
我們可以刪除使用render
?
我用性能使用遞歸溶液以及掙扎,但我發現一種更有效的替代方案。到checkAll
呼叫速度快,即使有大的樹,因爲它只能在render
單呼,而遞歸實現使用checkNode
此檢查將調用render
多次不必要的,正如你所指出。
的文檔中我找不到這一點,但我注意到,checkNode
電話forEachIdentifier
在其執行情況,checkAll
一樣的,所以實際上你可以通過在節點或nodeIds的陣列,而不是隻是一個單一的節點ID,在檢查完所有節點後,它只會調用render
一次。 checkAll
的唯一區別在於它特別傳遞樹中的所有nodeIds。
因此,您可以在事件處理程序中添加一些代碼,通過查看最後一個子節點的ID並構建一個範圍,然後調用checkNode
一次,爲父級下的所有節點生成nodeIds列表。
function onNodeChecked(event, node_data) {
var first_index, last_index, last_node, nodes, range, i;
nodes = node_data.nodes;
if (nodes != null) {
first_index = node_data.nodeId;
last_node = nodes[nodes.length - 1];
while (last_node.nodes != null) {
nodes = last_node.nodes;
last_node = nodes[nodes.length - 1];
}
last_index = last_node.nodeId;
range = [];
for (i = first_index; i <= last_index ; i++) {
range.push(i);
}
return $('#tree').treeview('checkNode', [range, {silent: true}]);
}
}
編輯:修改代碼以正確處理最後一個孩子有孩子的情況。