ajax 读XML文件 生成目录树 但是 xml文件太大了

时间:2022-08-20 12:02:01
火狐下 

ajax 读XML文件  生成目录树  但是 xml文件太大了,

有135K   9000多行.
生成树的时间太慢了 ,火狐特慢,象死了一样 

问有提速的方法

function loadzapp(xmlurl)

{


 if (window.ActiveXObject)

   xmlzapp=new ActiveXObject("Microsoft.XMLHTTP");

   else if(window.XMLHttpRequest)

    xmlzapp=new XMLHttpRequest();


xmlzapp.onreadystatechange=onhandzapp

xmlzapp.open("GET",xmlurl,true)

xmlzapp.send(null)





}

function onhandzapp(){
if (xmlzapp.readyState==4&&xmlzapp.status==200)

{   

resxml=xmlzapp.responseXML;
deNode=resxml.getElementsByTagName("ZAPP")[0];

var tree="";
var sum=1

czapp=switchTree(deNode,tree,sum,"");//遍历整个树,生成树结构 ,

}


}

11 个解决方案

#1


分页显示,或用json可能还快一些,

#2


用JSON真的比XML快点吗?有谁用过,举个例子。

#3


服务器端改造一下,每次拿一级,点击节点再拿下级。
这样做更符合AJAX的思想。我们不能假设用户什么都要,用户需要的只是我们能够提供的一部分,既然如此,那就由用户来决定我们拿哪些东西吧。

#4


数据量太大的话一部分一部分来加载,先加载需要的,然后用setTimeout/setInterval来分时间段加载

#5


xml就是太大了
json并非一定最快,但是json的方式是最快的,就是脚本融合

直接解析为js内置对象.

#6


json能象XML进行遍历吗?? 

#7


遍历,没问题啊
json进入js环境后,就当成对象来用就OK了,对象下面有属性,属性还可以是包含对象的集合,呵呵
当成数组遍历即可

#8


七楼的举个例子,来说明一下。

#9


给你一个例子,可能不是很恰当啊
不是标准的JSON格式,这是我以前用的一种格式,后来看到JSON的介绍,类似,知道原理就好了

//{R_0:[0,21], R_1:[22,21],R_2:[44,21],R_3:[66,21],R_4:[88,23]}
//以上是服务器返回的数据

var BabyMap;
eval("BabyMap=" + "{R_0:[0,21], R_1:[22,21],R_2:[44,21],R_3:[66,21],R_4:[88,23]}");
alert(BabyMap["R_0"]);//数组方式访问
alert(BabyMap.R_1);//属性方式,不过没有用数组索引的方式灵活,适合有固定属性的对象.
for(x in BabyMap)alert(BabyMap[x]);//for in 遍历

可以用类似属性的方法直接访问,也可以用for遍历

如果数据结构考虑周全,可以避免一部分遍历,如果效率要求很高,就考虑考虑数据如何组织吧

希望对你有所帮助


//测试全文 保存为xx.html浏览,见效果,^_^
<script language="javascript">
var BabyMap;
eval("BabyMap=" + "{R_0:[0,21], R_1:[22,21],R_2:[44,21],R_3:[66,21],R_4:[88,23]}");
alert(BabyMap["R_0"]);
alert(BabyMap.R_1);
for(x in BabyMap)alert(BabyMap[x]);
</script>


#10


xml的冗余是没有办法的事情,其他表示方法,如果要表示清楚,肯定也要多不少东西
所以如果要让数据小,再小,就考虑不要用那么详细的表示了,比如xml中定义为<ClientName>的标签,改为C1

如果嫌xml解析慢,就不要用xml,或者看看你的程序,解析的多了自然慢,如果觉得有些东西你没法控制

那就自己组织数据.效率要求高了,可以暂时不考虑什么易读不易读,对人易读的东西,对机器不一定易读.

自己把握这个尺度就可以了,^_^

#11


lz要干嘛?

#1


分页显示,或用json可能还快一些,

#2


用JSON真的比XML快点吗?有谁用过,举个例子。

#3


服务器端改造一下,每次拿一级,点击节点再拿下级。
这样做更符合AJAX的思想。我们不能假设用户什么都要,用户需要的只是我们能够提供的一部分,既然如此,那就由用户来决定我们拿哪些东西吧。

#4


数据量太大的话一部分一部分来加载,先加载需要的,然后用setTimeout/setInterval来分时间段加载

#5


xml就是太大了
json并非一定最快,但是json的方式是最快的,就是脚本融合

直接解析为js内置对象.

#6


json能象XML进行遍历吗?? 

#7


遍历,没问题啊
json进入js环境后,就当成对象来用就OK了,对象下面有属性,属性还可以是包含对象的集合,呵呵
当成数组遍历即可

#8


七楼的举个例子,来说明一下。

#9


给你一个例子,可能不是很恰当啊
不是标准的JSON格式,这是我以前用的一种格式,后来看到JSON的介绍,类似,知道原理就好了

//{R_0:[0,21], R_1:[22,21],R_2:[44,21],R_3:[66,21],R_4:[88,23]}
//以上是服务器返回的数据

var BabyMap;
eval("BabyMap=" + "{R_0:[0,21], R_1:[22,21],R_2:[44,21],R_3:[66,21],R_4:[88,23]}");
alert(BabyMap["R_0"]);//数组方式访问
alert(BabyMap.R_1);//属性方式,不过没有用数组索引的方式灵活,适合有固定属性的对象.
for(x in BabyMap)alert(BabyMap[x]);//for in 遍历

可以用类似属性的方法直接访问,也可以用for遍历

如果数据结构考虑周全,可以避免一部分遍历,如果效率要求很高,就考虑考虑数据如何组织吧

希望对你有所帮助


//测试全文 保存为xx.html浏览,见效果,^_^
<script language="javascript">
var BabyMap;
eval("BabyMap=" + "{R_0:[0,21], R_1:[22,21],R_2:[44,21],R_3:[66,21],R_4:[88,23]}");
alert(BabyMap["R_0"]);
alert(BabyMap.R_1);
for(x in BabyMap)alert(BabyMap[x]);
</script>


#10


xml的冗余是没有办法的事情,其他表示方法,如果要表示清楚,肯定也要多不少东西
所以如果要让数据小,再小,就考虑不要用那么详细的表示了,比如xml中定义为<ClientName>的标签,改为C1

如果嫌xml解析慢,就不要用xml,或者看看你的程序,解析的多了自然慢,如果觉得有些东西你没法控制

那就自己组织数据.效率要求高了,可以暂时不考虑什么易读不易读,对人易读的东西,对机器不一定易读.

自己把握这个尺度就可以了,^_^

#11


lz要干嘛?