当我取消选中 jstree 中的大量节点时,我收到运行缓慢的脚本警告。
我正在使用循环遍历数组以获取 id,然后取消选中节点。有没有其他方法可以做到这一点或让它更快?在我的特殊情况下,我的数组长度是 1600。
$.each(myArray, function(key, item){
$("#myTree").jstree("uncheck_node", "!#"+item);
});
当我取消选中 jstree 中的大量节点时,我收到运行缓慢的脚本警告。
我正在使用循环遍历数组以获取 id,然后取消选中节点。有没有其他方法可以做到这一点或让它更快?在我的特殊情况下,我的数组长度是 1600。
$.each(myArray, function(key, item){
$("#myTree").jstree("uncheck_node", "!#"+item);
});
当您需要进行大量 DOM 操作时,一般建议是使用 将其分成几块setInterval/setTimeout
,以便浏览器能够在脚本执行之间处理用户输入和其他事件。
例如(粗略的例子):
var done = 0;
var chunks = 4;
var myInterval = setInterval(process_chunk, 1000);
var $myTree = $("#myTree");
var chunkLength = myArray.length / chunks;
process_chunk = function() {
var arrayChunk = myArray.slice(done*chunkLength, (done + 1)*chunkLength)
$.each(arrayChunk, function(key, item){
$myTree.jstree("uncheck_node", "!#"+item);
});
done += 1;
if (done === chunks) {
myInterval.clearInterval();
}
}