我们公司里面的树型控件一直用的是应用比较广泛的开源控件WebFXLoadTree。
可能是因为之前的系统里面树型数据比较少,每次load也都不会超过20条数据的那种,所以一直都没有发现有性能问题,近来我们做的这个系统,里面有这样的一个树型,它会load一个村里面的若干个家庭,大概有二百至三百条数据,问题就出来了,需要load很长时间。
那么我简单的做了个测试,
数据量:358条
包括后台查询的时间再到数据展现的时间 : 8.9秒,
吓得我出了身冷汗,这种速度客户是无论如何都接受不了的。本来想说服客户是否可以通过其他方式来查询,比如列表分页,但是客户已经习惯之前的开发的cs系统的操作,他们习惯左边有树形来展开家庭,再通过家庭看每个家庭所对应的人。没办法,说服不了客户,那就只能试着看能否优化它。
简单分析了下,后台数据生成xml这一块才20多毫秒,看来性能瓶颈在前台部分,那么就从解析xml这里开始下手, 下面我会贴出一些简短的代码,因为代码太长。
我在前台测试速度的方法是 用new Date().getTime(),
那么从解析xml开始入手。_startLoadXmlTree(); 这个方法也就是通过xmlhttp来返回一个xml,再将遍历这个xml,将里面的属性值当参数传给真正的节点对象,一个一个的装载进去。
解析xml花的时间很少,通过一小程序段一小程序段的测试,发现关键就在是在遍历过程中new 节点对象的时候,再将一个一个节点add到父节点里面去的时间花费的很长,
这个时间花了7秒多钟,那接着再看add方法,它的add方法是继承WebFXTreeAbstractNode.prototype.add方法。
这个方法主要是设置了一些图片对象的位置,再组装好一个节点所对应的html字符串,再将这个字符串insertHTMLBeforeEnd 进去,所以节点是一个一个生成的,每次在遍历的时候又设置已经生成好的节点的里面html对象一些属性,比如图片等等。而每次设置这些html对象的时候,都是多次通过document.getElementById来取 ,那么性能瓶颈就在这里。
因为这个树型的复杂性,它所对应的html结构也是相当复杂的,也就是说在html标签非常多,结构非常复杂的情况下,我在358个节点里面遍历,也就是在非常复杂的html结构(并且这个html结构是持续变多的,因为节点是慢慢增多的)中,多次通过document.getElementById来寻找这个html结构里面的一个html对象,就造成了这个性能瓶颈,因为document.getElementById也是要遍历整个html文档的节点,再通过id的匹配来找的。那么这样一下来,在这种环境下就造成了性能问题。
也许当时作者为了面向对象的封装性而忽视了这个性能瓶颈。
一下午就这样过去了,看来作者当时的设计导致我不可能去优化这棵树,我得自己去写一个,
具体思路如下:
就是当后台传给一个xml的时候,我解析xml,将所有节点的所对应的html叠加起来设置好,再一起加载到父节点中,从而避免上面的做法。ok简单设计了一下,我的想法应该可行,明天我会接着将自己的树的思路写出来。
今天学习总结:
1.WebFXLoadTree不适合用于每次装载数据量超过100的情况,也希望大家有遇到我这样需求的时候好好考虑。
(未完待续)希望大家能给我更多好的建议,此上只是我个人的一些理解,有不当之处希望大家指出。
分享到:
相关推荐
【webfxloadtree 树】是一种基于JavaScript的动态树形组件,主要应用于Web开发中,用于展示层次结构的数据。在网页设计中,这种组件能够帮助用户以清晰、交互的方式查看和操作多级数据,比如文件系统目录、组织结构...
标题 "JS 动态树 异步加载树 xloadtree WebFXLoadTree" 指的是在JavaScript中实现的一种特定的树形结构组件,它具备动态加载和异步数据获取的功能。这种技术常用于构建大型数据集的层级展示,如文件系统、组织结构或...
随着B/S架构(Browser/Server)应用的普及,如何在网络环境中高效地呈现和操作树型结构成为了一个值得关注的问题。 #### 实现方法概述 根据文章描述,目前有多种方式可以实现树型结构目录。主要包括基于dTree组件...
### XTree_javascript_树型菜单 #### 一、XTree 概述 XTree 是一款功能强大的基于 AJAX 的树形菜单插件。其主要特点在于每次只加载当前节点下的所有节点,从而大大提升了用户体验及数据加载效率。开发人员只需要...
它支持异步加载,这意味着树节点可以按需加载,而不是一次性加载所有数据,这有助于提高页面性能,尤其是在处理大量数据时。XLoadTree.js还提供了一套丰富的API,允许开发者自定义节点的外观和行为,例如添加图标、...
XTree是一种基于对象操作的树型菜单库。引入xtree.js和xtree.css文件后,可以实例化树并添加节点。例如: ```html <script src="xtree.js"></script> ... if (document.getElementById) { var tree = ...
- 使用 `new WebFXLoadTree("根节点名称", "XML数据源路径")` 创建一个动态加载数据的树对象。 - 调用 `write()` 方法将树写入页面。 - 此时,树中的数据将从指定的 XML 文件中动态加载。 #### 3. XML 文件结构 - ...
dtree,或称为决策树,在计算机科学领域通常指的是用于数据挖掘、机器学习的一种方法,通过一系列判断条件对数据进行分类。然而,在本篇笔记中,我们将关注的是一种基于Web的应用组件——WebFXTree,它被用来构建...
- **WebFXLoadTree**:用于加载XML文件并将其转换为动态树形结构。为了避免加载过慢,建议保持**tree_a.xml**文件体积适中。 2. **Ajax技术的应用**: - Ajax技术(Asynchronous JavaScript and XML)允许网页在...