You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JQXTree加载500条数据速度过慢,如何优化绑定耗时?

解决JQXTree加载500条数据速度缓慢的方案

当前代码通过dataAdapter.getRecordsHierarchy转换数据再绑定的方式,在数据量较大时会产生额外开销,导致加载耗时过长。以下是几种优化方案:

1. 跳过dataAdapter,手动构建树形结构

jqxTree支持直接传入符合格式的JSON数据,无需通过dataAdapter做中间转换。手动遍历原始数据构建树形结构,减少冗余处理步骤:

// 自定义树形结构构建函数
function buildTree(data, idField, parentIdField, labelField, valueField) {
    const nodeMap = {};
    const treeData = [];
    // 先将所有节点存入映射表
    data.forEach(node => {
        nodeMap[node[idField]] = {
            label: node[labelField],
            value: node[valueField],
            ClassName: node.ClassName,
            items: []
        };
    });
    // 建立父子节点关联
    data.forEach(node => {
        const parentNode = nodeMap[node[parentIdField]];
        if (parentNode) {
            parentNode.items.push(nodeMap[node[idField]]);
        } else {
            treeData.push(nodeMap[node[idField]]);
        }
    });
    return treeData;
}

// 生成树形数据并初始化组件
const treeRecords = buildTree(dataSource, "ClassRid", "ParentClassRid", "ClassLabel", "ClassRid");
$("#treeId").jqxTree({ checkboxes: true, source: treeRecords, width: '100%', height: 220 });

2. 启用懒加载(延迟加载)

如果树形结构有层级区分,只初始化根节点,用户展开节点时再加载对应子节点,避免一次性加载所有数据:

// 仅加载根节点(假设根节点ParentClassRid为0)
const rootNodes = dataSource.filter(node => node.ParentClassRid === 0);
const rootTreeData = buildTree(rootNodes, "ClassRid", "ParentClassRid", "ClassLabel", "ClassRid");

$("#treeId").jqxTree({
    checkboxes: true,
    source: rootTreeData,
    width: '100%',
    height: 220,
    expand: function(event) {
        const targetItem = event.args.element;
        const itemValue = $("#treeId").jqxTree('getItem', targetItem).value;
        // 筛选当前节点的子节点
        const childNodes = dataSource.filter(node => node.ParentClassRid === itemValue);
        const childTreeData = buildTree(childNodes, "ClassRid", "ParentClassRid", "ClassLabel", "ClassRid");
        // 添加子节点到目标节点
        $("#treeId").jqxTree('addTo', childTreeData, targetItem);
    }
});

3. 简化配置,减少冗余处理

如果仍需要使用dataAdapter,移除对本地数据无效的配置项,减少不必要的逻辑处理:

var source = {
    datatype: "json",
    datafields: [{ name: "ClassRid", type: "int" }, { name: "ParentClassRid", type: "int" }, { name: "ClassName", type: "string" }, { name: "ClassLabel", type: "string" }],
    id: "ClassRid",
    localdata: dataSource
};
var dataAdapter = new $.jqx.dataAdapter(source);
dataAdapter.dataBind();
var records = dataAdapter.getRecordsHierarchy("ClassRid", "ParentClassRid", "items", [{ name: "ClassLabel", map: "label" }, { name: "ClassRid", map: "value" }, { name: "ClassName", map: "ClassName" }]);
$("#treeId").jqxTree({ checkboxes: true, source: records, width: '100%', height: 220 });

优先尝试手动构建树形结构的方案,这能直接减少中间转换的性能开销,最快提升加载速度。

内容的提问来源于stack exchange,提问作者Robin089

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:35:29