一种解决树控件节点数量限制的方法
【技术领域】
[0001 ]本发明涉及一种解决树控件节点数量限制的方法。
【背景技术】
[0002]在计算机软件界面的设计中,经常要使用到树控件来展现一些有层级关系的数据。传统的树控件采用同步加载,并一次性加载所有的节点数据进行展现。随着系统数据量逐步增长,当一个树控件的节点数达到上万甚至更多时,传统的树控件就会遇到数据无法从后台成功加载、数据节点过多导致界面卡死甚至整个界面崩溃等问题。而由于树控件节点数量瓶颈的存在,严重制约着软件界面设计的发展。
【发明内容】
[0003]本发明的目的在于提供一种解决树控件节点数量限制的方法,解决树控件在节点数量多的情况下,无法从后台加载数据且前端展现卡死问题。
[0004]本发明一种解决树控件节点数量限制的方法,包括如下步骤:
步骤1、当软件界面刚展现时,树控件只显示根节点,当用户点击根节点时,通过异步方式向系统后台获取所有的下级子节点数据,分批加载子节点数据,然后,将加载到的子节点数据缓存到本地数组中,最后根据树控件上当前处于可见区域并处于展开状态的节点,从本地数组中读取对应的子节点数据并渲染到树控件上展现;
步骤2、树控件只留下处于可见区域并且处于展开状态下的节点数据,其余的节点数据一旦处于隐藏或收缩后的状态,立即自动移除,如果树控件的滚动条滑动到节点使之可见时,程序将自动加载该可见节点的节点数据,同时把离开可见区域的节点数据移除。
[0005]所述的步骤I具体实现方式为:
前端传递父节点ID参数给后台,后台检索出父节点ID下有N个子节点数据,该N个子节点数据分M批返回给前端;
前端把接收到的节点数据,按层级关系存储到本地数组中,根据树控件上当前处于可见区域并处于展开状态的节点,从本地数组中读取对应的子节点数据并渲染到树控件上展现。
[0006]本发明采用分批次异步加载方法来解决后台树控件无法一次性加载成功的问题。具体方法为:当软件界面刚刚展现时,树控件只显示根节点,而不是展现所有的节点,当用户点击根节点时,通过异步方式向系统后台获取下级节点数据,同时为了确保节点数据能成功加载,把传统的一次性加载改为分批加载。例如:某节点下有10000个了节点,一次性加载可能会加载失败,现在可以改分为10次自动加载,每次加载1000条数据。然后,将加载到的数据缓存到本地数组,最后从数组里面读取子节点数据并渲染到树控件上展现。
[0007]本发明通过动态加载可见区域的节点数据并移除非可见区的节点数据,来解决树控件节点数量多时,界面卡死问题。树控件的每个节点都需要消耗一定的内存和CPU。当树控件的节点数量达到一定量时,操作系统的内存、CPU等资源将会被消耗完。此时软件界面就会出现卡死、甚至整个界面崩溃等问题。本发明的树控件只留下处于可见区域并且处于展开状态下的节点数据,其余的节点数据一旦处于隐藏或收缩后的状态,立即自动移除。比如树控件下有A、B、C、D、E等五个节点,而展现在界面的可见区域只有A和B两个节点,且A和B两节点处于展开状态,此时将自动移除掉不可见的C、D、E的节点数据;如果树控件的滚动条滑动到C节点可见时,程序将自动加载C节点的数据,同时把离开可见区的节点数据移除。由此可减少整个树控件对计算机资源的消耗,即能提高计算机资源的有效利用率,同时可解决树控件卡死的问题,从而根本性地突破树控件对节点数量的限制。
【具体实施方式】
[0008]本发明中树控件具有后台服务和前端展现两个子功能,后台负责给前端展现提供节点数据,前端负责接收来自后台的节点数据并展现;树控件的每个节点有一个ID值,此节点ID作为树节点的唯一标识。
[0009]本发明一种解决树控件节点数量限制的方法,具体包括如下步骤:
步骤1、当软件界面刚展现时,树控件只显示根节点,当用户点击根节点时,通过异步方式向系统后台获取所有的下级子节点数据,分批加载子节点数据,然后,将加载到的子节点数据缓存到本地数组中,最后根据树控件上当前处于可见区域并处于展开状态的节点,从本地数组中读取对应的子节点数据并渲染到树控件上展现:
前端传递父节点ID参数给后台,后台检索出父节点ID下有N个子节点数据,假定检索到10000个子节点,假定后台每批次返回给前端1000个子节点,即所有的子节点数据分为10批次返回给前端;
前端把接收到的节点数据,按层级关系存储到本地数组中,假定本地数组下存储的数据有[A,B,C,D,E]五个节点数据;
假定树控件当前可见的节点有A和B两个,且A和B两个节点都处于展开的状态,此时树控件将从数组里读取A和B两个节点的数据,并渲染到树控件上展现;
步骤2、树控件只留下处于可见区域并且处于展开状态下的节点数据,其余的节点数据一旦处于隐藏或收缩后的状态,立即自动移除,如果树控件的滚动条滑动到节点使之可见时,程序将自动加载该可见节点的节点数据,同时把离开可见区域的节点数据移除:
当树控件的滚动条滑动至C和D节点时,随着滚动条的滑动,A和B两节点由可见状态变为不可见状态,此时树控件自动把A和B两节点的数据从树控件上移除,同时又从数组中读取C和D的节点数据并渲染到树控件上展现;若树控件的滚动条重新滑动到B节点时,此时树控件又从数组中读取B节点的数据进行展现,同时把变为隐藏状态的所有节点数据从树控件上移除,滚动条至B节点可见时,树控件又重新加载B节点的数据展现,并移除掉变为不可见状态的D节点数据,以后的操作流程依此类推。
[0010]本发明通过分批次异步加载节点数据,提高了树节点数据加载的成功率,降低了由于树控件节点数据加载失败而导致的一系列故障;通过动态加载可见区域的节点数据并移除非可见区的节点数据,有效降低了树控件对操作系统内存、CPU等资源的消耗,提高了操作系统资源的利用率,解决了树控件过度消耗操作系统资源而导致界面卡死等问题,从而根本性地突破树控件对节点数量的限制。
[0011]以上所述,仅是本发明较佳实施例而已,并非对本发明的技术范围作任何限制,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
【主权项】
1.一种解决树控件节点数量限制的方法,其特征在于包括如下步骤: 步骤1、当软件界面刚展现时,树控件只显示根节点,当用户点击根节点时,通过异步方式向系统后台获取所有的下级子节点数据,分批加载子节点数据,然后,将加载到的子节点数据缓存到本地数组中,最后根据树控件上当前处于可见区域并处于展开状态的节点,从本地数组中读取对应的子节点数据并渲染到树控件上展现; 步骤2、树控件只留下处于可见区域并且处于展开状态下的节点数据,其余的节点数据一旦处于隐藏或收缩后的状态,立即自动移除,如果树控件的滚动条滑动到节点使之可见时,程序将自动加载该可见节点的节点数据,同时把离开可见区域的节点数据移除。2.根据权利要求1所述的一种解决树控件节点数量限制的方法,其特征在于步骤I具体实现方式为: 前端传递父节点ID参数给后台,后台检索出父节点ID下有N个子节点数据,该N个子节点数据分M批返回给前端; 前端把接收到的节点数据,按层级关系存储到本地数组中,根据树控件上当前处于可见区域并处于展开状态的节点,从本地数组中读取对应的子节点数据并渲染到树控件上展现。
【专利摘要】本发明一种解决树控件节点数量限制的方法,通过分批次异步加载节点数据,提高了树节点数据加载的成功率,降低了由于树控件节点数据加载失败而导致的一系列故障;通过动态加载可见区域的节点数据并移除非可见区的节点数据,有效降低了树控件对操作系统内存、CPU等资源的消耗,提高了操作系统资源的利用率,解决了树控件过度消耗操作系统资源而导致界面卡死等问题,从而根本性地突破树控件对节点数量的限制。
【IPC分类】G06F9/44
【公开号】CN105468365
【申请号】CN201510805867
【发明人】吴超民, 刘志芳, 谢燕玲, 崔跃
【申请人】厦门雅迅网络股份有限公司
【公开日】2016年4月6日
【申请日】2015年11月20日