`
fang9159
  • 浏览: 47252 次
  • 性别: Icon_minigender_1
  • 来自: 湖北
社区版块
存档分类
最新评论

WebfxLoadTree树型的性能问题(一)

阅读更多
我们公司里面的树型控件一直用的是应用比较广泛的开源控件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 树

    webfxloadtree,在网上收集的相关资料。 webfxloadtree,在网上收集的相关资料。

    JS 动态树 异步加载树 xloadtree WebFXLoadTree

    NULL 博文链接:https://yhef.iteye.com/blog/743746

    xloadtree资源包

    xloadtree的资源包含所需的js包,css文件,还有api,对就像是你想要的xloadtree的资源

    钢桁架结构振动特性渐变分析工具

    钢桁架结构振动特性渐变分析工具

    数据库实战-收集一些常见的 MySQL 死锁案例.zip

    数据库实战-收集一些常见的 MySQL 死锁案例.zip 数据库实战-收集一些常见的 MySQL 死锁案例.zip 在工作过程中偶尔会遇到死锁问题,虽然这种问题遇到的概率不大,但每次遇到的时候要想彻底弄懂其原理并找到解决方案却并不容易。这个项目收集了一些常见的 MySQL 死锁案例,大多数案例都来源于网络,并对其进行分类汇总,试图通过死锁日志分析出每种死锁的原因,还原出死锁现场。 实际上,我们在定位死锁问题时,不仅应该对死锁日志进行分析,还应该结合具体的业务代码,或者根据 binlog,理出每个事务执行的 SQL 语句。

    Android的移动应用与php服务器交互实例源码.rar

    Android的移动应用与php服务器交互实例源码.rar

    【滤波跟踪】基于matlab平方根容积卡尔曼滤波机器人手臂运动跟踪【含Matlab源码 4540期】.mp4

    Matlab研究室上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    计算BMI等一些关于热量和蛋白质摄入的小工具.zip

    蛋白质是生物体中普遍存在的一类重要生物大分子,由天然氨基酸通过肽键连接而成。它具有复杂的分子结构和特定的生物功能,是表达生物遗传性状的一类主要物质。 蛋白质的结构可分为四级:一级结构是组成蛋白质多肽链的线性氨基酸序列;二级结构是依靠不同氨基酸之间的C=O和N-H基团间的氢键形成的稳定结构,主要为α螺旋和β折叠;三级结构是通过多个二级结构元素在三维空间的排列所形成的一个蛋白质分子的三维结构;四级结构用于描述由不同多肽链(亚基)间相互作用形成具有功能的蛋白质复合物分子。 蛋白质在生物体内具有多种功能,包括提供能量、维持电解质平衡、信息交流、构成人的身体以及免疫等。例如,蛋白质分解可以为人体提供能量,每克蛋白质能产生4千卡的热能;血液里的蛋白质能帮助维持体内的酸碱平衡和血液的渗透压;蛋白质是组成人体器官组织的重要物质,可以修复受损的器官功能,以及维持细胞的生长和更新;蛋白质也是构成多种生理活性的物质,如免疫球蛋白,具有维持机体正常免疫功能的作用。 蛋白质的合成是指生物按照从脱氧核糖核酸(DNA)转录得到的信使核糖核酸(mRNA)上的遗传信息合成蛋白质的过程。这个过程包括氨基酸的活化、多肽链合成的起始、肽链的延长、肽链的终止和释放以及蛋白质合成后的加工修饰等步骤。 蛋白质降解是指食物中的蛋白质经过蛋白质降解酶的作用降解为多肽和氨基酸然后被人体吸收的过程。这个过程在细胞的生理活动中发挥着极其重要的作用,例如将蛋白质降解后成为小分子的氨基酸,并被循环利用;处理错误折叠的蛋白质以及多余组分,使之降解,以防机体产生错误应答。 总的来说,蛋白质是生物体内不可或缺的一类重要物质,对于维持生物体的正常生理功能具有至关重要的作用。

    IMG_20240520_180055.HEIC

    IMG_20240520_180055.HEIC

    基于java实现的智慧医院门诊管理系统项目源码+设计文档+实验报告+详细资料.zip

    基于java实现的智慧医院门诊管理系统项目源码+设计文档+实验报告+详细资料.zip

    JavaScript_网页复制工具,网页抓取预渲染和SEO提升.zip

    JavaScript

    batik-xml-1.7.jar

    Batik是为想使用svg格式图片来实现各种功能的应用程序和Applet提供的一个基于java的工具包

    node-v4.7.0-headers.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v14.19.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v18.19.1-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    JavaScript_DeFi开发人员路线图是一个精心策划的开发人员手册,其中包括DApps开发资源和参考的最佳工具列表.zip

    JavaScript

    node-v17.0.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    CoordinateData.java

    CoordinateData.java

    JavaScript_命令行工具自定义Spotify客户端支持Windows MacOS和Linux.zip

    JavaScript

    头歌c语言实验答案.rar

    头歌c语言实验答案

Global site tag (gtag.js) - Google Analytics