CN112434030B - 基于树形结构数据的高性能列表实现方法与设备 - Google Patents

基于树形结构数据的高性能列表实现方法与设备 Download PDF

Info

Publication number
CN112434030B
CN112434030B CN202011256097.4A CN202011256097A CN112434030B CN 112434030 B CN112434030 B CN 112434030B CN 202011256097 A CN202011256097 A CN 202011256097A CN 112434030 B CN112434030 B CN 112434030B
Authority
CN
China
Prior art keywords
node
branch
data
nodes
branch node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202011256097.4A
Other languages
English (en)
Other versions
CN112434030A (zh
Inventor
薛茹冰
王星
王瑞
俞君杰
王夷
李东晓
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Xinyi Intelligent Technology Co ltd
Original Assignee
Shanghai Xinyi Intelligent Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Xinyi Intelligent Technology Co ltd filed Critical Shanghai Xinyi Intelligent Technology Co ltd
Priority to CN202011256097.4A priority Critical patent/CN112434030B/zh
Publication of CN112434030A publication Critical patent/CN112434030A/zh
Application granted granted Critical
Publication of CN112434030B publication Critical patent/CN112434030B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/26Visual data mining; Browsing structured data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请的目的是提供一种基于树形结构数据的高性能列表实现方案。该方案先获取树形结构数据的枝节点初始信息,然后构建枝节点索引,创建枝节点的状态信息,构建枝节点直属子代的枝节点和叶节点,接着构建高性能列表的数据源,将结果存入节点信息数组中,当所述高性能列表第一次展开时,异步获取枝节点下的数据,通过遍历所述节点信息数组,构建所述高性能列表的数据。与现有技术相比,本申请可以提升树型结构数据的操作性能,减少操作等待时间,提高用户的体验。

Description

基于树形结构数据的高性能列表实现方法与设备
技术领域
本申请涉及信息技术领域,尤其涉及一种基于树形结构数据的高性能列表实现技术。
背景技术
在实际应用场景中,当出现有大量节点的树型结构数据需要进行展示和处理的情况,以目前现有的技术和组件(element-ui中的Tree树型控件),无法满足大量数据的展示和操作。当数据量很大的时候,执行选中/取消选中、展开/收起节点、滚动等操作,会出现很大的性能问题,延迟很高,用户体验特别差。
发明内容
本申请的一个目的是提供一种基于树形结构数据的高性能列表实现方法与设备。
根据本申请的一个方面,提供了一种基于树形结构数据的高性能列表实现方法,其中,所述方法包括:
获取树形结构数据的枝节点初始信息,其中,所述枝节点初始信息包括该树形结构数据所有的枝节点信息,以及每个枝节点下的直属枝节点和叶节点数量信息;
构建枝节点索引,创建枝节点的状态信息,构建枝节点直属子代的枝节点和叶节点;
构建高性能列表的数据源,将结果存入节点信息数组中;当所述高性能列表第一次展开时,异步获取枝节点下的数据;通过遍历所述节点信息数组,构建所述高性能列表的数据。
根据本申请的另一个方面,还提供了一种基于树形结构数据的高性能列表实现设备,其中,所述设备包括:
第一模块,用于获取树形结构数据的枝节点初始信息,其中,所述枝节点初始信息包括该树形结构数据所有的枝节点信息,以及每个枝节点下的直属枝节点和叶节点数量信息;
第二模块,用于构建枝节点索引,创建枝节点的状态信息,构建枝节点直属子代的枝节点和叶节点;
第三模块,用于构建高性能列表的数据源,将结果存入节点信息数组中;当所述高性能列表第一次展开时,异步获取枝节点下的数据;通过遍历所述节点信息数组,构建所述高性能列表的数据。
根据本申请的又一个方面,还提供了一种计算设备,其中,该设备包括用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述设备执行所述的基于树形结构数据的高性能列表实现方法。
根据本申请的又一个方面,还提供了一种计算机可读介质,其上存储有计算机程序指令,所述计算机可读指令可被处理器执行以实现所述的基于树形结构数据的高性能列表实现方法。
本申请提供的方案中,先获取树形结构数据的枝节点初始信息,然后构建枝节点索引,创建枝节点的状态信息,构建枝节点直属子代的枝节点和叶节点,接着构建高性能列表的数据源,将结果存入节点信息数组中,当所述高性能列表第一次展开时,异步获取枝节点下的数据,通过遍历所述节点信息数组,构建所述高性能列表的数据。与现有技术相比,本申请可以提升树型结构数据的操作性能,减少操作等待时间,提高用户的体验。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其他特征、目的和优点将会变得更明显:
图1是根据本申请实施例的一种基于树形结构数据的高性能列表实现方法流程图;
图2是根据本申请实施例的一种树形结构抽象成列表结构的示意图;
图3是根据本申请实施例的一种树形结构数据到列表处理的流程图;
图4(a)~(d)是根据本申请实施例的一种树形结构数据到列表处理的流程图中的子流程示意图;
图5是根据本申请实施例的一种高性能虚拟列表模型结构示意图;
图6是根据本申请实施例的一种实现高性能列表的流程图;
图7是根据本申请实施例的一种基于树形结构数据的高性能列表实现设备示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的装置或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
本申请实施例提供了基于树形结构数据的高性能列表实现方法,通过所述高性能列表对树进行优化,如图2所示,对于一颗树,可以把所有的数据看作是一个扁平化的结构,在视图层的时候,可以看作是一个列表,对于不同的层级,每个层级的列表前方占位空格符的个数是不一样的,从而就形成了数据的树型表现。
对于海量的的数据,如果只实现视图中部分的列表,并不全部生成,生成的部分可以完全占据可视范围,在滚动的时候再去加载应该出现的部分数据。运用此种方法,即使面对大量的数据,也只需要渲染少量的节点,那么就不会出现大量的dom渲染问题,从而可以提高前端的性能,减少操作等待时间,提高用户的体验。
在实际场景中,执行该方法的设备可以是用户设备、网络设备或者用户设备与网络设备通过网络相集成所构成的设备。其中,所述用户设备包括但不限于智能手机、平板电脑、个人计算机(PC)等终端设备,所述网络设备包括但不限于网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现。在此,云由基于云计算(CloudComputing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。
图1是根据本申请实施例的一种基于树形结构数据的高性能列表实现方法流程图,该方法包括步骤S101、步骤S102和步骤S103。
对于一颗树型结构或者多颗树型结构的数据,可以将所有的节点分为枝节点(branch)和叶节点(leaf)。通过所述步骤S101、步骤S102和步骤S103可以实现树形结构数据的扁平化。
步骤S101,获取树形结构数据的枝节点初始信息,其中,所述枝节点初始信息包括该树形结构数据所有的枝节点信息,以及每个枝节点下的直属枝节点和叶节点数量信息。
例如,首先需要获取树形结构数据的枝节点初始信息(originalBranches),从而获取所有的枝节点(branch)信息,以及每个枝节点(branch)下的直属枝节点(branch)和叶节点(leaf)个数。此时,可以只获取一些必要的信息,不用获取其他详细信息,这样可以提高第一次请求时的性能。
步骤S102,构建枝节点索引,创建枝节点的状态信息,构建枝节点直属子代的枝节点和叶节点。
例如,构建枝节点(branch)索引,如图4(a)所示,创建枝节点(branch)的状态信息(如:是否收起状态,是否是枝节点,是否加载了后代数据,是否是加载后代状态等)。同时也在构建枝节点直属子代的枝节点(branch)和叶节点(leaf),分别存放在枝节点(branch)和叶节点(leaf)自身对应的branches和leafs数组里面。
在一些实施例中,构建枝节点索引的具体步骤包括:(1)按照层级序号正序排序,将层级序号小的枝节点数据排在前方,即父代节点会排在前面,子代节点排在后面;(2)基于排序后的数据建立枝节点索引数据branchesObject,同时创建枝节点的状态信息,以及构建枝节点下的直属子代枝节点(branch)和叶节点(leaf),分别存放在枝节点和叶节点自身对应的数组里面,因为在所述步骤S101中获取的是所述枝节点初始信息,此时子代枝节点可能是有数据的,而叶节点是没有数据的;(3)存储所构建的枝节点索引数据branchesObject。
步骤S103,构建高性能列表的数据源,将结果存入节点信息数组中;当所述高性能列表第一次展开时,异步获取枝节点下的数据;通过遍历所述节点信息数组,构建所述高性能列表的数据。
例如,图3是根据本申请实施例的一种树形结构数据到列表处理的流程图,图4(a)~(d)分别是图3中“子流程(一)~(四)”的示意图。
在一些实施例中,构建高性能列表的数据源的具体步骤包括:准备用于存放结果的节点信息数组platSortNodes;遍历所述枝节点初始信息,对所述枝节点初始信息中的每个枝节点进行递归处理;将每一个当前枝节点推入所述节点信息数组platSortNodes中,放在所述节点信息数组platSortNodes的最后;对当前枝节点下的直属枝节点进行递归处理;对当前枝节点下的枝节点和直属叶节点的数量进行统计,分别记为当前枝节点的branchNumber和leafNumber;根据当前枝节点下的直属枝节点的branchNumber值和直属枝节点的数量,对当前枝节点的branchNumber进行累加处理;根据当前枝节点下的直属枝节点的leafNumber值,对当前枝节点的leafNumber进行累加处理;记录当前枝节点的叶节点开始位置leafStartIndex;将所述节点信息数组platSortNodes转变为哈希数组;将当前枝节点下的子节点数量childrenNumber记录为当前枝节点的branchNumber和leafNumber之和。
例如,如图4(b)所示,构建高性能列表的数据源的具体步骤包括:(1)准备一个具有层级顺序特性的节点信息数组(当前枝节点后面紧跟着后代枝节点和叶节点或者后代个数的占位)platSortNodes用于存放结果;(2)遍历所述枝节点初始信息(originalBranches),采用深度优先(DFS)递归算法对所述枝节点初始信息(originalBranches)中的每个枝节点进行递归处理;(3.1)将每一个当前枝节点(branch)推入platSortNodes中,放在platSortNodes的最后;(3.2)对当前枝节点(branch)下的直属枝节点进行同样的深度优先(DFS)递归算法处理;(3.3.1)对当前枝节点(branch)下的后代枝节点和直属叶节点的数量进行统计,分别记为当前枝节点的branchNumber和leafNumber;(3.3.2)记录当前枝节点的叶节点(leaf)开始位置leafStartIndex,方便后续展开节点时后续的数据快速定位放在对应的platSortNodes位置;(3.3.3)将platSortNodes转变为哈希数组,改变platSortNodes的长度,设置platSortNodes的长度等于当前platSortNodes的长度加上当前枝节点(branch)直属的叶节点(leaf)个数;(3.3.4)将当前枝节点下的所有子节点数量childrenNumber记录为当前枝节点的branchNumber和leafNumber之和。
在一些实施例中,当所述高性能列表第一次展开时,异步获取枝节点下的数据,包括:获取该树形结构数据的叶节点数据,根据所述叶节点数据改变枝节点的状态信息,例如改变isFetch、loading等状态,将叶节点信息放入枝节点(branch)的叶节点(leaf)属性中;如图4(c)所示,遍历处理所述叶节点数据,通过枝节点的leafStartIndex确定对应的platSortNodes位置,将叶节点信息依次放入所述节点信息数组platSortNodes中。
在一些实施例中,构建所述高性能列表的数据的具体步骤包括:如图4(d)所示,遍历所述节点信息数组platSortNodes,将所述节点信息数组platSortNodes中的每一项放入result数组中,如果当前节点是收起状态即isCollapse为真,则对platSortNodes跳过item.childrenNumber个继续遍历处理;将所述result数组返回给所述高性能列表。
在一些实施例中,所述方法还包括:采用三层容器实现所述高性能列表,其中,通过第一层容器撑出所述高性能列表的滚动条,通过第二层容器设置所述高性能列表的顶部距离,通过第三层容器定位到所述高性能列表的正确位置。
例如,对于高性能长列表,可以采用三层容器实现,如图5所示,通过第一层容器撑出滚动条,在滚动的时候通过第二层容器设置顶部距离,最后通过第三层容器定位到正确的位置(定位到可视区域,并且能填充满可视区域)。在此,可以将数据源定义为items,将所述高性能列表中的每一项定义为item,将所述高性能列表的高度定义为itemHeight,将所述高性能列表中应该渲染的个数定义为itemBatchNumber。
在一些实施例中,如图6所示,采用三层容器实现所述高性能列表的具体步骤包括:(a)计算所述高性能列表中每个项目(item)的高度itemRenderHeight,itemRenderHeight=itemHeight;计算所述高性能列表中应该渲染的高度batchHeight,batchHeight=itemRenderHeight*itemBatchNumber;计算所述高性能列表中项目(items)的数量itemCount;(b)将所述高性能列表的数据源进行分组处理,按itemBatchNumber个分批分组,放入renderBatches中,便于通过索引快速找到每一批数据;根据父容器的滚动顶部(top)值,计算得到用于索引的renderIndexs数组,其中renderIndexs为一位的数组或者两位的数组;计算所述高性能列表的高度height,height=itemRenderHeight*itemCount,并将其设置为所述第一层容器的高度;当所述高性能列表滚动时,更新所述renderIndexs数组,同时计算所述高性能列表的顶部距离MariginTop,MariginTop=renderIndexs[0]*batchHeight,占位renderIndexs[0]前面批次应该显示的列表的高度;根据所述renderIndexs数组的索引,从renderBatches中取出所需渲染的数据visibleBatches;(c)每当所述高性能列表滚动和/或所述高性能列表的数据源(items)改变,重新计算所述步骤(b)。
图7是根据本申请实施例的一种基于树形结构数据的高性能列表实现设备示意图,该设备包括第一模块701、第二模块702和第三模块703。
第一模块701,获取树形结构数据的枝节点初始信息,其中,所述枝节点初始信息包括该树形结构数据所有的枝节点信息,以及每个枝节点下的直属枝节点和叶节点数量信息。
例如,首先需要获取树形结构数据的枝节点初始信息(originalBranches),从而获取所有的枝节点(branch)信息,以及每个枝节点(branch)下的直属枝节点(branch)和叶节点(leaf)个数。此时,可以只获取一些必要的信息,不用获取其他详细信息,这样可以提高第一次请求时的性能。
第二模块702,构建枝节点索引,创建枝节点的状态信息,构建枝节点直属子代的枝节点和叶节点。
例如,构建枝节点(branch)索引,如图4(a)所示,创建枝节点(branch)的状态信息(如:是否收起状态,是否是枝节点,是否加载了后代数据,是否是加载后代状态等)。同时也在构建枝节点直属子代的枝节点(branch)和叶节点(leaf),分别存放在枝节点(branch)和叶节点(leaf)自身对应的branches和leafs数组里面。
在一些实施例中,构建枝节点索引的具体步骤包括:(1)按照层级序号正序排序,将层级序号小的枝节点数据排在前方,即父代节点会排在前面,子代节点排在后面;(2)基于排序后的数据建立枝节点索引数据branchesObject,同时创建枝节点的状态信息,以及构建枝节点下的直属子代枝节点(branch)和叶节点(leaf),分别存放在枝节点和叶节点自身对应的数组里面,因为所述第一模块701获取的是所述枝节点初始信息,此时子代枝节点可能是有数据的,而叶节点是没有数据的;(3)存储所构建的枝节点索引数据branchesObject。
第三模块703,构建高性能列表的数据源,将结果存入节点信息数组中;当所述高性能列表第一次展开时,异步获取枝节点下的数据;通过遍历所述节点信息数组,构建所述高性能列表的数据。
例如,图3是根据本申请实施例的一种树形结构数据到列表处理的流程图,图4(a)~(d)分别是图3中“子流程(一)~(四)”的示意图。
在一些实施例中,构建高性能列表的数据源的具体步骤包括:准备用于存放结果的节点信息数组platSortNodes;遍历所述枝节点初始信息,对所述枝节点初始信息中的每个枝节点进行递归处理;将每一个当前枝节点推入所述节点信息数组platSortNodes中,放在所述节点信息数组platSortNodes的最后;对当前枝节点下的直属枝节点进行递归处理;对当前枝节点下的枝节点和直属叶节点的数量进行统计,分别记为当前枝节点的branchNumber和leafNumber;根据当前枝节点下的直属枝节点的branchNumber值和直属枝节点的数量,对当前枝节点的branchNumber进行累加处理;根据当前枝节点下的直属枝节点的leafNumber值,对当前枝节点的leafNumber进行累加处理;记录当前枝节点的叶节点开始位置leafStartIndex;将所述节点信息数组platSortNodes转变为哈希数组;将当前枝节点下的子节点数量childrenNumber记录为当前枝节点的branchNumber和leafNumber之和。
例如,如图4(b)所示,构建高性能列表的数据源的具体步骤包括:(1)准备一个具有层级顺序特性的节点信息数组(当前枝节点后面紧跟着后代枝节点和叶节点或者后代个数的占位)platSortNodes用于存放结果;(2)遍历所述枝节点初始信息(originalBranches),采用深度优先(DFS)递归算法对所述枝节点初始信息(originalBranches)中的每个枝节点进行递归处理;(3.1)将每一个当前枝节点(branch)推入platSortNodes中,放在platSortNodes的最后;(3.2)对当前枝节点(branch)下的直属枝节点进行同样的深度优先(DFS)递归算法处理;(3.3.1)对当前枝节点(branch)下的后代枝节点和直属叶节点的数量进行统计,分别记为当前枝节点的branchNumber和leafNumber;(3.3.2)记录当前枝节点的叶节点(leaf)开始位置leafStartIndex,方便后续展开节点时后续的数据快速定位放在对应的platSortNodes位置;(3.3.3)将platSortNodes转变为哈希数组,改变platSortNodes的长度,设置platSortNodes的长度等于当前platSortNodes的长度加上当前枝节点(branch)直属的叶节点(leaf)个数;(3.3.4)将当前枝节点下的所有子节点数量childrenNumber记录为当前枝节点的branchNumber和leafNumber之和。
在一些实施例中,当所述高性能列表第一次展开时,异步获取枝节点下的数据,包括:获取该树形结构数据的叶节点数据,根据所述叶节点数据改变枝节点的状态信息,例如改变isFetch、loading等状态,将叶节点信息放入枝节点(branch)的叶节点(leaf)属性中;如图4(c)所示,遍历处理所述叶节点数据,通过枝节点的leafStartIndex确定对应的platSortNodes位置,将叶节点信息依次放入所述节点信息数组platSortNodes中。
在一些实施例中,构建所述高性能列表的数据的具体步骤包括:如图4(d)所示,遍历所述节点信息数组platSortNodes,将所述节点信息数组platSortNodes中的每一项放入result数组中,如果当前节点是收起状态即isCollapse为真,则对platSortNodes跳过item.childrenNumber个继续遍历处理;将所述result数组返回给所述高性能列表。
在一些实施例中,所述基于树形结构数据的高性能列表实现设备还用于:采用三层容器实现所述高性能列表,其中,通过第一层容器撑出所述高性能列表的滚动条,通过第二层容器设置所述高性能列表的顶部距离,通过第三层容器定位到所述高性能列表的正确位置。
例如,对于高性能长列表,可以采用三层容器实现,如图5所示,通过第一层容器撑出滚动条,在滚动的时候通过第二层容器设置顶部距离,最后通过第三层容器定位到正确的位置(定位到可视区域,并且能填充满可视区域)。在此,可以将数据源定义为items,将所述高性能列表中的每一项定义为item,将所述高性能列表的高度定义为itemHeight,将所述高性能列表中应该渲染的个数定义为itemBatchNumber。
在一些实施例中,如图6所示,采用三层容器实现所述高性能列表的具体步骤包括:(a)计算所述高性能列表中每个项目(item)的高度itemRenderHeight,itemRenderHeight=itemHeight;计算所述高性能列表中应该渲染的高度batchHeight,batchHeight=itemRenderHeight*itemBatchNumber;计算所述高性能列表中项目(items)的数量itemCount;(b)将所述高性能列表的数据源进行分组处理,按itemBatchNumber个分批分组,放入renderBatches中,便于通过索引快速找到每一批数据;根据父容器的滚动顶部(top)值,计算得到用于索引的renderIndexs数组,其中renderIndexs为一位的数组或者两位的数组;计算所述高性能列表的高度height,height=itemRenderHeight*itemCount,并将其设置为所述第一层容器的高度;当所述高性能列表滚动时,更新所述renderIndexs数组,同时计算所述高性能列表的顶部距离MariginTop,MariginTop=renderIndexs[0]*batchHeight,占位renderIndexs[0]前面批次应该显示的列表的高度;根据所述renderIndexs数组的索引,从renderBatches中取出所需渲染的数据visibleBatches;(c)每当所述高性能列表滚动和/或所述高性能列表的数据源(items)改变,重新计算所述步骤(b)。
综上所述,本申请实施例在实现树形结构数据的扁平化过程中,可以实现快速定位节点,寻找相关节点(如兄弟节点、子孙节点)。在异步获取子代数据的过程中,可以避免通过遍历而导致增加复杂度,影响性能。本申请实施例提升了树型结构数据的操作性能,减少了操作等待时间,提升了用户体验。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据程序指令运行的计算机设备的工作存储器中。在此,本申请的一些实施例提供了一种计算设备,该设备包括用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述设备执行前述本申请的多个实施例的方法和/或技术方案。
此外,本申请的一些实施例还提供了一种计算机可读介质,其上存储有计算机程序指令,所述计算机可读指令可被处理器执行以实现前述本申请的多个实施例的方法和/或技术方案。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一些实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

Claims (9)

1.一种基于树形结构数据的高性能列表实现方法,其中,所述方法包括:
获取树形结构数据的枝节点初始信息,其中,所述枝节点初始信息包括该树形结构数据所有的枝节点信息,以及每个枝节点下的直属枝节点和叶节点数量信息;
根据所述枝节点初始信息,构建枝节点索引,创建枝节点的状态信息,构建枝节点直属子代的枝节点和叶节点,其中,所述枝节点的状态信息包括:是否收起状态、是否是枝节点、是否加载了后代数据、是否是加载后代状态;构建枝节点索引的具体步骤包括:按照层级序号正序排序,将层级序号小的枝节点数据排在前方,基于排序后的数据建立枝节点索引数据,同时创建枝节点的状态信息,以及构建枝节点下的直属子代枝节点和叶节点,分别存放在枝节点和叶节点自身对应的数组里面,存储所构建的枝节点索引数据;记录当前枝节点的叶节点开始位置以及当前枝节点下的子节点数量;
根据所述枝节点索引、所述枝节点直属子代的枝节点和叶节点,构建高性能列表的数据源,将构建所述高性能列表的数据源时得到的结果存入节点信息数组中;当所述高性能列表第一次展开时,异步获取枝节点下的数据即叶节点数据,根据所述叶节点数据改变枝节点的状态信息,根据所述状态信息遍历处理所述叶节点数据,将叶节点信息依次放入所述节点信息数组;通过遍历所述节点信息数组,构建所述高性能列表的数据。
2.根据权利要求1所述的方法,其中,所述方法还包括:
采用三层容器实现所述高性能列表,其中,通过第一层容器撑出所述高性能列表的滚动条,通过第二层容器设置所述高性能列表的顶部距离,通过第三层容器定位到所述高性能列表的正确位置,其中,所述正确位置表示定位到可视区域,并且能填充满可视区域。
3.根据权利要求2所述的方法,其中,采用三层容器实现所述高性能列表的具体步骤包括:
(a)计算所述高性能列表中每个项目的高度,计算所述高性能列表中应该渲染的高度,计算所述高性能列表中项目的数量;
(b)将所述高性能列表的数据源进行分组处理,放入renderBatches中;根据父容器的顶部滚动经过的距离值,计算得到用于索引的renderIndexs数组;计算所述高性能列表的高度,并将其设置为所述第一层容器的高度;当所述高性能列表滚动时,更新所述renderIndexs数组,同时计算所述高性能列表的顶部距离;根据所述renderIndexs数组的索引,从renderBatches中取出所需渲染的数据;其中,所述第一层容器的高度表示所述高性能列表正文的高度,所述高性能列表的顶部距离表示所述第二层容器到所述第一层容器顶部的距离;
(c)每当所述高性能列表滚动和/或所述高性能列表的数据源改变,重新计算所述步骤(b)。
4.根据权利要求1至3中任一项所述的方法,其中,构建高性能列表的数据源的具体步骤包括:
准备用于存放结果的节点信息数组platSortNodes;遍历所述枝节点初始信息,对所述枝节点初始信息中的每个枝节点进行递归处理;将每一个当前枝节点推入所述节点信息数组platSortNodes中,放在所述节点信息数组platSortNodes的最后;对当前枝节点下的直属枝节点进行递归处理;对当前枝节点下的枝节点和直属叶节点的数量进行统计,分别记为当前枝节点的branchNumber和leafNumber;根据当前枝节点下的直属枝节点的branchNumber值和直属枝节点的数量,对当前枝节点的branchNumber进行累加处理;根据当前枝节点下的直属枝节点的leafNumber值,对当前枝节点的leafNumber进行累加处理;记录当前枝节点的叶节点开始位置leafStartIndex,方便后续展开节点时后续的数据快速定位放在对应的platSortNodes位置;将所述节点信息数组platSortNodes转变为哈希数组;将当前枝节点下的子节点数量childrenNumber记录为当前枝节点的branchNumber和leafNumber之和,所述子节点数量childrenNumber用于遍历所述节点信息数组platSortNodes。
5.根据权利要求4所述的方法,其中,当所述高性能列表第一次展开时,异步获取枝节点下的数据,包括:
获取该树形结构数据的叶节点数据,根据所述叶节点数据改变枝节点的状态信息;
遍历处理所述叶节点数据,通过枝节点的leafStartIndex确定对应的platSortNodes位置,将叶节点信息依次放入所述节点信息数组platSortNodes中。
6.根据权利要求4所述的方法,其中,构建所述高性能列表的数据的具体步骤包括:
遍历所述节点信息数组platSortNodes,将所述节点信息数组platSortNodes中的每一项放入result数组中,将所述result数组返回给所述高性能列表。
7.一种基于树形结构数据的高性能列表实现设备,其中,所述设备包括:
第一模块,用于获取树形结构数据的枝节点初始信息,其中,所述枝节点初始信息包括该树形结构数据所有的枝节点信息,以及每个枝节点下的直属枝节点和叶节点数量信息;
第二模块,用于根据所述枝节点初始信息,构建枝节点索引,创建枝节点的状态信息,构建枝节点直属子代的枝节点和叶节点,其中,所述枝节点的状态信息包括:是否收起状态、是否是枝节点、是否加载了后代数据、是否是加载后代状态;构建枝节点索引的具体步骤包括:按照层级序号正序排序,将层级序号小的枝节点数据排在前方,基于排序后的数据建立枝节点索引数据,同时创建枝节点的状态信息,以及构建枝节点下的直属子代枝节点和叶节点,分别存放在枝节点和叶节点自身对应的数组里面,存储所构建的枝节点索引数据;记录当前枝节点的叶节点开始位置以及当前枝节点下的子节点数量;
第三模块,用于根据所述枝节点索引、所述枝节点直属子代的枝节点和叶节点,构建高性能列表的数据源,将构建所述高性能列表的数据源时得到的结果存入节点信息数组中;当所述高性能列表第一次展开时,异步获取枝节点下的数据即叶节点数据,根据所述叶节点数据改变枝节点的状态信息,根据所述状态信息遍历处理所述叶节点数据,将叶节点信息依次放入所述节点信息数组;通过遍历所述节点信息数组,构建所述高性能列表的数据。
8.一种计算设备,其中,该设备包括用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述设备执行权利要求1至6中任一项所述的方法。
9.一种计算机可读介质,其上存储有计算机程序指令,所述计算机可读指令可被处理器执行以实现如权利要求1至6中任一项所述的方法。
CN202011256097.4A 2020-11-11 2020-11-11 基于树形结构数据的高性能列表实现方法与设备 Active CN112434030B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011256097.4A CN112434030B (zh) 2020-11-11 2020-11-11 基于树形结构数据的高性能列表实现方法与设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011256097.4A CN112434030B (zh) 2020-11-11 2020-11-11 基于树形结构数据的高性能列表实现方法与设备

Publications (2)

Publication Number Publication Date
CN112434030A CN112434030A (zh) 2021-03-02
CN112434030B true CN112434030B (zh) 2022-11-18

Family

ID=74699852

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011256097.4A Active CN112434030B (zh) 2020-11-11 2020-11-11 基于树形结构数据的高性能列表实现方法与设备

Country Status (1)

Country Link
CN (1) CN112434030B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113642292B (zh) * 2021-07-14 2022-06-14 广州市玄武无线科技股份有限公司 一种树形列表的实现方法、系统、设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110647322A (zh) * 2019-08-15 2020-01-03 北京三快在线科技有限公司 列表渲染方法、装置、电子设备和计算机可读介质
CN110688531A (zh) * 2019-08-26 2020-01-14 北京旷视科技有限公司 树组件渲染方法和装置、数据处理设备及介质
CN110968813A (zh) * 2019-11-29 2020-04-07 中国银行股份有限公司 一种索引页面展示方法及装置
CN111078763A (zh) * 2019-12-13 2020-04-28 厦门市美亚柏科信息股份有限公司 基于zTree的树形结构异步提取方法、终端设备及存储介质
CN111581215A (zh) * 2020-05-07 2020-08-25 钟士平 数组树数据储存方法、快速查找方法及可读储存介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101095377B1 (ko) * 2004-06-03 2011-12-16 가부시키가이샤 터보 데이터 라보라토리 배열의 생성방법, 정보처리장치, 및, 프로그램
CN100504868C (zh) * 2006-06-30 2009-06-24 西门子(中国)有限公司 一种具有多行内容节点的树形结构列表显示方法及其装置
JP5339507B2 (ja) * 2008-10-01 2013-11-13 インターナショナル・ビジネス・マシーンズ・コーポレーション 木構造を探索する方法
US20140059488A1 (en) * 2012-08-21 2014-02-27 Sap Ag System and method for viewing selected descendant nodes in a tree hierarchy displayed in tabular form
CN105468365B (zh) * 2015-11-20 2021-04-23 厦门雅迅网络股份有限公司 一种解决树控件节点数量限制的方法
CN106599218A (zh) * 2016-12-16 2017-04-26 北京奇虎科技有限公司 一种树形结构的处理方法和装置
CN110333864B (zh) * 2019-06-18 2021-09-14 腾讯科技(深圳)有限公司 一种树形数据渲染方法、装置、设备及介质
CN110825382A (zh) * 2019-10-14 2020-02-21 紫光云(南京)数字技术有限公司 一种前端大数据树形结构展示方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110647322A (zh) * 2019-08-15 2020-01-03 北京三快在线科技有限公司 列表渲染方法、装置、电子设备和计算机可读介质
CN110688531A (zh) * 2019-08-26 2020-01-14 北京旷视科技有限公司 树组件渲染方法和装置、数据处理设备及介质
CN110968813A (zh) * 2019-11-29 2020-04-07 中国银行股份有限公司 一种索引页面展示方法及装置
CN111078763A (zh) * 2019-12-13 2020-04-28 厦门市美亚柏科信息股份有限公司 基于zTree的树形结构异步提取方法、终端设备及存储介质
CN111581215A (zh) * 2020-05-07 2020-08-25 钟士平 数组树数据储存方法、快速查找方法及可读储存介质

Also Published As

Publication number Publication date
CN112434030A (zh) 2021-03-02

Similar Documents

Publication Publication Date Title
US20230084389A1 (en) System and method for providing bottom-up aggregation in a multidimensional database environment
US10984020B2 (en) System and method for supporting large queries in a multidimensional database environment
US20200226151A1 (en) System and method for supporting queries having sub-select constructs in a multidimensional database environment
US20240078229A1 (en) Generating, accessing, and displaying lineage metadata
KR101581980B1 (ko) 계층적 데이터의 페이징
US20140046985A1 (en) Storing hierarchical table as a markup language file
US10936606B2 (en) Method and system for processing data in a parallel database environment
CN112434030B (zh) 基于树形结构数据的高性能列表实现方法与设备
US9002782B2 (en) Hyper-lattice model for optimized sequencing of online analytical processing (OLAP) operations on data warehouses
US11544267B2 (en) Hierarchical window function
CN116595123A (zh) 多维数据查询方法、装置、计算机设备和存储介质
Handy et al. Fast, axis-agnostic, dynamically summarized storage and retrieval for mass spectrometry data
CN114722112A (zh) 一种可视化列表数据展示方法及其装置
US20180068005A1 (en) Distributed computation of percentile statistics for multidimensional data sets
CN104881433A (zh) 一种存储遥感影像的方法和系统
Akande et al. Towards an efficient storage and retrieval mechanism for large unstructured grids
CN113836087B (zh) 一种基于文件模式的大数据层存储方法
CN111861651A (zh) 一种商品发布页搭建的方法及设备
CN114611038A (zh) 网页聚类方法及相关装置
Zeidan et al. GPU-based Out-of-Core HLBVH Construction.
Liu Out-of-Core Graph Coloring Algorithm
Team Data Migration from Relational to NoSQL Database: Review and Comparative Study
CN117453694A (zh) 针对存在合并多行单元格的表格的页面虚拟滚动渲染方法
Zhou et al. Data structures based on non-linear relations and data processing methods
Gu Scalable Dynamic Big Data Geovisualization With Spatial Data Structure

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: 200331 room e176, 1f, 406 Gulang Road, Putuo District, Shanghai

Applicant after: Shanghai Xinyi Intelligent Technology Co.,Ltd.

Address before: 200080 7th floor, No.137 Haining Road, Hongkou District, Shanghai

Applicant before: Shanghai Xinyi Intelligent Technology Co.,Ltd.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant
CB03 Change of inventor or designer information

Inventor after: Xue Rubing

Inventor after: Wang Xing

Inventor after: Wang Rui

Inventor after: Yu Junjie

Inventor after: Wang Yi

Inventor after: Li Dongxiao

Inventor before: Xue Rubing

Inventor before: Wang Xing

Inventor before: Wang Rui

Inventor before: Yu Junjie

Inventor before: Wang Yi

Inventor before: Li Dongxiao

CB03 Change of inventor or designer information