DOM很耗资源的啊,支持异步加载
解决方案 »
- 问一个jQuery.ui.dialog的问题
- ext遮罩层mask怎么设置可以复制呢?
- 急,请问javascript返回值问题?
- 求一个简单的正则表达式(输入不能大于23的数字)
- 脚本广告病毒都服了,高手出来顶一个吧
- js里怎么捕获Form节点的“增加同级节点”事件
- 我想用JS判断INPUT里输入的内容,如果输入了字符,则弹出出错信息!谢谢!急!
- 添加下拉框列表元素的问题,答出立即给分
- 一个简单css问题
- js $.get url 参数问题,请教各位
- 我是初学者,望高手不吝赐教。怎样实现下拉菜单功能?就像csdn的“显示导航栏”,不过不要求树形功能,只要点击后能有下拉菜单出现就行。
- 关于联动菜单
我就用M$的treeview加载一棵有6K多节点的树也只有几秒钟时间呀
学习ing
异步显示的技术使得一次加载多节点树成为可能,因此我就在这个思路下继续做了下去.对
于XML数据源,所要做的优化不多,本身的XML DOM已经够强大了,所以我在大数组数据源方面
再花了时间去研究,结果又发现了一个瓶颈:数据从JS语句转化到数组. 这个问题也许不会有人去注意,毕竟平常使用数组的时候数组长度难得到达 k 级.但是在
页面加载的时候,每人节点从JS语句一个个Add到内存当中,其中还要分析这些数据,把数据
按照自己封装的treeview node类实例化,这个过程一下子就是重复几千次,显然这里消耗了大
量的时间,一万节点的这种转化时间远超出了10秒,因此这里很有必要优化,否则前功尽弃. 这里我顺道说一下另一个话题:关于函数的参数串 arguments.在通常写函数的时候我们
会定义 function funName(param1, param2, param3),然后在函数里调用这些参数,大
家发现了其中的弊病了吗?就是参数的秩序已经严格定好,在调用的时候多传,少传,参数秩序
错位都将发生错误.如果我的函数参数有变化了,那么所有调用的地方全得改,可扩展性太差了
而用XML就没有这个问题了,可扩展性与兼容性都没得说了,那么有没有好的解决办法呢? 有一次我在用 window.open()的时候灵感来了,open()的第三个参数是新窗口的外观定
义 window.open("aa.htm", "", "width=; height=; top=; left=; toolbar=")
在这个大参数字符串中,参数多少不管,位置不管,XML的优点都有了.我哈哈大笑 :) 这
个问题也解决了.这样在大数组数据给定的时候随意,兼容,再也不用瞪着眼睛数位置了. 回到原来的话题,即然大数组加载耗时间,那么就需要另一种模式,我用了哈希表(不知
道我这种称呼是否正确,望有识之士指正.var hash = {}; hash["a"] = "aaa";),将
节点数据信息组合成一个大字符串(上面已经说了),加载的时候不需要做任何的转化,直接
将字符串赋到哈希表里,然后再用异步法,用到几个节点,再实例化几个就是的.做了这步优化
之后,我的28000节点树终于可以在10秒之内展开了. 以下例子摘自于【梅花雪网页控件集】Treeviw 1.0
var tree = new MzTreeview("id=tree; text=根节点文字; icon=root; hint=提示");
tree.nodes["nodeId1"] = "text=节点文字; icon=节点图标名; data=data";
tree.nodes["nodeId2"] = "text=节点文字; hint=提示; method=alert()";
//..........
tree.nodes["nodeIdN"] = "text=节点文字; url=url.asp;";
tree.url = "treeview.asp";
tree.target = "FrameName";
document.write(tree.toString()); 最后我又发现一个瓶颈,这里先卖个关子,希望有同感的人点出.经过这一步优化之后我
我公布一下优化的结果: 环境:(CPU)P4 1.4M (RAM)256MB windown 2000 server 1024*768 IE6.0
节点:30*30*30(总数27930节点)
网页大小:2.2M
网页打开时间:2.5±0.2秒
第一节点展开时间:1.45±0.05秒(30 nodes)
第二节点展开时间:0.4→2.2秒
第三节点异型时间:2.8±0.2秒 另11*30*30(总数10240节点)打开时间最长为1秒
---- 待续 ----
其实节点数再加上去, 我这种模式没有问题, 但是网络的传输量上已经承受不了了.大概计算了一下, 一万个节点大小在 1 MB左右, 即使使用宽带, 网络传输时间已经超过10秒了. 一次加载数据就目前的网度下, 50000 节点算是极限了(等一分钟吧), 若节点再多则只好使用异步加载了. 欢迎大家参加Treeview终极加速探讨!!
1.服务器端或整理成文件也可,主要是提供数据;
但此数据是经过整理后的html,我使用<div>形式;(使用XML数据源也得格式化,处理上没多大差别)2.客户端使用htc格式化数据;此处的格式化只是进行缩进及图标等一些格式上的处理
由于提取的数据本身就是html代码,可以忽略遍历DOM~~
http://fason.nease.net/samples/treemenu/
2、使用style.height控制展开收缩而不是style.display我的项目中只用这两点就保证了可用性。
网页打开,加载第一个节点数据。其后在<body onLoad="">用iframe继续加载节点数据。
如果用户点击,这个节点有数据了,那就显示出来,如果没有数据就采用异步加载的方法。以上意见可能不是很成熟,仅供参考!
</OBJECT><script>theTreeView.Nodes.Add(null, 0, "R" + 0, "ROOT" + 0);for (var i=1; i< 3000; i++)
{
theTreeView.Nodes.Add("R" + (i-1), 4, "R" + i, "ROOT" + i);
}</script>