工作,但非常慢......用JS调用XML,然后从XML中添加JS函数到文本

时间:2013-03-14 15:27:19

标签: javascript xml flash

我使用JS从XML文件调用文本,然后在该文本中添加JS函数。但是,响应非常非常缓慢。有没有办法可以改善这个?

我有两个XML文件...我创建了一个,然后是另一个来自使用flash程序创建的数据库。我希望这个flash程序的某些功能能够突出显示。我做了以下三种方式之一:

  1. 我手动输入文本并使用JS突出显示flash功能onmouseover(速度很快,但我必须手动输入html页面上的所有文本,并且必须为每个文本执行此操作单个flash文件(我做的超过50个)另外,数据会经常更改,最好只有一个数据库文档,而不是单独进入每个flash文件。

  2. 我在包含JS的XML文件中创建了一个标记,当我从页面调用它时,整个列表立即填充,但是在每次鼠标悬停时花费几秒钟的速度非常慢每篇文字)

  3. 我用JS调用XML文本,并为鼠标悬停添加另一个JS函数。这也很有效,但速度很慢(但不如#2那么慢,但仍然非常慢)而且JS很长,因为我必须单独调用每个文本,而不是像在#2中那样填充整个列表/ p>

  4. 以下是2和3的示例:

    #2的XML

    <VIRGINIAREP>
            <DISTRICTS>
                <STATE>Virginia</STATE>
                <DISTRICT>1</DISTRICT>  
                <REPRESENTATIVE>Robert J. Wittman</REPRESENTATIVE>
                <REPWEB>http://wittman.house.gov' onMouseOver='highlight1()' onMouseOut='highlight_clear()'</REPWEB>
                <PARTY>R</PARTY>
            </DISTRICTS>
            <DISTRICTS>
                <STATE>Virginia</STATE>
                <DISTRICT>2</DISTRICT>  
                <REPRESENTATIVE>Scott Rigell</REPRESENTATIVE>
                <REPWEB>http://rigell.house.gov' onMouseOver='highlight2()' onMouseOut='highlight_clear()'</REPWEB>
                <PARTY>R</PARTY>
            </DISTRICTS>
            <DISTRICTS>
                <STATE>Virginia</STATE>
                <DISTRICT>3</DISTRICT>  
                <REPRESENTATIVE>Robert C. Scott</REPRESENTATIVE>
                <REPWEB>http://www.house.gov/scott/' onMouseOver='highlight3()' onMouseOut='highlight_clear()'</REPWEB>
                <PARTY>D</PARTY>
            </DISTRICTS>..... etc.
    

    JS for#2

    <script>
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.open("GET","113CongressC.xml",false);
    xmlhttp.send();
    xmlDoc=xmlhttp.responseXML; 
    
    document.write("<table border='0'>");
    var x=xmlDoc.getElementsByTagName("DISTRICTS");
    for (i=0;i<x.length;i++)
      { 
      document.write("<tr><td>");
      document.write(x[i].getElementsByTagName("DISTRICT")[0].childNodes[0].nodeValue + " -");
      document.write("</td><td>");
      document.write("<a TARGET='_blank' href='" +  x[i].getElementsByTagName("REPWEB")[0].childNodes[0].nodeValue + "'>" + x[i].getElementsByTagName("REPRESENTATIVE")[0].childNodes[0].nodeValue) + "</a>";
       document.write("</td><td>");
      document.write("(" + x[i].getElementsByTagName("PARTY")[0].childNodes[0].nodeValue + ")");
      document.write("</td></tr>");
      }
    document.write("</table>");
    
    </script> 
    

    突出显示功能

    function highlight() {          
                theMap.features('DISTRICT="1"').highlight(
                    {visible: true, fillColor: "#FFFF00", fillAlpha: 1.0}  
                );
            }
    

    #3的XML

    <VIRGINIAREP>
                <DISTRICTS>
                    <STATE>Virginia</STATE>
                    <DISTRICT>1</DISTRICT>  
                    <REPRESENTATIVE>Robert Wittman</REPRESENTATIVE>
                    <REPWEB>http://wittman.house.gov</REPWEB>
                    <PARTY>R</PARTY>    
                </DISTRICTS> ...etc.
    

    JS for#3

    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.open("GET","113CongressC.xml",false);
    xmlhttp.send();
    xmlDoc=xmlhttp.responseXML;  
    
    x=xmlDoc.getElementsByTagName("DISTRICTS");
    i=0;
    
    
    function displayREPS()
    {
    rep="<a target = '_blank' onMouseOver='highlight()' onMouseOut='highlight_clear()' href = '" + (x[0].getElementsByTagName("REPWEB")[0].childNodes[0].nodeValue) + "'>" +(x[0].getElementsByTagName("REPRESENTATIVE")[0].childNodes[0].nodeValue) + "</a>";
    district=(x[0].getElementsByTagName("DISTRICT")[0].childNodes[0].nodeValue);
    party=(x[0].getElementsByTagName("PARTY")[0].childNodes[0].nodeValue);
    
    //2 
    rep1="<a target = '_blank' onMouseOver='highlight1()' onMouseOut='highlight_clear()' href = '" + (x[1].getElementsByTagName("REPWEB")[0].childNodes[0].nodeValue) + "'>" +(x[1].getElementsByTagName("REPRESENTATIVE")[0].childNodes[0].nodeValue) + "</a>";
    district1=(x[1].getElementsByTagName("DISTRICT")[0].childNodes[0].nodeValue);
    party1=(x[1].getElementsByTagName("PARTY")[0].childNodes[0].nodeValue);
    //3
    rep2="<a target = '_blank' onMouseOver='highlight2()' onMouseOut='highlight_clear()' href = '" + (x[2].getElementsByTagName("REPWEB")[0].childNodes[0].nodeValue) + "'>" +(x[2].getElementsByTagName("REPRESENTATIVE")[0].childNodes[0].nodeValue) + "</a>";
    district2=(x[2].getElementsByTagName("DISTRICT")[0].childNodes[0].nodeValue);
    party2=(x[2].getElementsByTagName("PARTY")[0].childNodes[0].nodeValue);
    

    ....等。

    //TXT
    
    txt0=district + " -  " + rep + "&nbsp; ("+ party + ")";
    txt1=district1 + " -  " + rep1 + "&nbsp; ("+ party1 + ")";
    txt2=district2 + " -  " + rep2 + "&nbsp; ("+ party2 + ")";
    txt3=district3 + " -  " + rep3 + "&nbsp; ("+ party3 + ")";
    txt4=district4 + " -  " + rep4 + "&nbsp; ("+ party4 + ")";
    ...etc
    
    
    document.getElementById("showREPS").innerHTML=txt0 + "<br>" + txt1 +  "<br>" + txt2 + "<br>" + txt3 + "<br>" + txt4 + "<br>" + txt5 + "<br>" + txt6 + "<br>" + txt7 + "<br>" + txt8 + "<br>" + txt9 +  "<br>" + txt10 + "<br>";
    }
    </script>
    
    
    </head>
    <body onload="displayREPS()">
    
    <div id='showREPS'></div>
    

    我也尝试过:<REPWEB><![CDATA[<a target='_blank' href='http://wittman.house.gov' onMouseOver='highlight0()' onMouseOut='highlight_clear()'>]]></REPWEB>用于XML

    关于如何以更快的速度更好,更有效地做到这一点的任何建议?

2 个答案:

答案 0 :(得分:1)

我发现COM代码中的XHR对象存在同样的问题。 当我使用 responseXML 方法而不是 responseText 时,xml文档很难找到具有XPath查询的节点。 我正在使用MSXML6。

  • 使用 responseText 获取整个文字
  • 创建DOM文档
  • 通过新DOM文档的 loadXML(string)方法加载xml

和瞧!真快!我不知道XMLHTTPRequest在 responseXML 上创建什么样的DOM文档来获取如此缓慢的DOM文档,但创建新文档真的更快

答案 1 :(得分:0)

我会考虑使用JSON格式而不是XML。传输速度要快得多(字节数越小),JSON也会更快地解析。