1

JSを使用してXMLファイルからテキストを呼び出し、そのテキストにJS関数を追加しています。ただし、応答は非常に遅いです。これを改善する方法はありますか?

2つのXMLファイルがあります...1つは作成したもので、もう1つはフラッシュプログラムで作成したデータベースからのものです。このフラッシュプログラムの特定の機能を強調したいと思います。私はこれを次の3つの方法のいずれかで行いました。

  1. 私は手動でテキストを入力し、JSを使用してマウスオーバーのフラッシュ機能を強調表示します(速度は素晴らしいですが、htmlページにすべてのテキストを手動で入力する必要があり、すべての単一のフラッシュファイルに対してこれを行う必要があります(私はさらに、データは頻繁に変更されるため、各フラッシュファイルに個別にアクセスするよりも、単一のデータベースドキュメントを使用する方が適切です。

  2. JSを含むXMLファイルにタグを作成し、ページから呼び出すと、リスト全体が一度に入力されますが、各テキストのマウスオーバーごとに数秒かかるほど非常に遅いです)

  3. JSを使用してXMLテキストを呼び出し、マウスオーバー用に別のJS関数を追加します。これも同様に機能しますが、非常に遅く(ただし、#2ほど遅くはありませんが、それでも非常に遅い)、JSは非常に長いため、#2で行ったようにリスト全体を入力するのではなく、各テキストを個別に呼び出す必要があります。

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.

#2のJS

<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.

#3のJS

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用

高速でこれをより良く、より効率的に行う方法について何か提案はありますか?

4

2 に答える 2

0

XMLではなくJSON形式の使用を検討します。送信ははるかに高速であり(バイト数では小さい)、JSONもはるかに高速に解析されます。

于 2013-03-14T15:31:46.770 に答える