1

次のようなxmlファイルがあります。

<UUT>
<DKBFile>091750</DKBFile>
<part>
  <name>FL_U1</name>
  <xcoord>439</xcoord>
  <ycoord>132</ycoord>
  <width>55</width>
  <height>24</height>
</part>
</UUT>

名前/座標情報を取得しようとしている「パーツ」が数百ある可能性があります。量と情報を取得するパーツは変わりますが、100 を超えるパーツの情報を取得しようとすると、トラバースが非常に遅くなります。これが私のコードです:

$.ajax({
url: "PROFILER_ShopAid/shopaid.xml",
dataType: ($.browser.msie) ? "xml" : "text/xml",

success: function(data){    

var i = 1;  //array traversal
var xcoord = 0;
var ycoord = 0;
var width = 0;
var height = 0;
var part = "";
var nameFound = "";

//Get Part Count
var covCnt = DKB.GetClearedPartCnt();  //Gets number of parts

     //Get Part Info
while (covCnt >= i)
{
    part = DKB.GetClearedPart(i);  //Returns name of  part

    $(data).find("part").each(function() {
        nameFound = $(this).find("name").text();  

        if(part.toLowerCase() == nameFound.toLowerCase())
        {
            xcoord = parseInt( $(this).find("xcoord").text() );
            ycoord = parseInt( $(this).find("ycoord").text() );
            width = parseInt( $(this).find("width").text() );
            height = parseInt($(this).find("height").text() );

        }

    });
    i = i + 1;
}
},

error: function(){
}

}); 

xml ファイルはローカル サーバー上にあり、このコードは HTA (HTML アプリケーション ファイル) で使用されています。xml ファイルをトラバースするためのより効率的な方法はありますか? 現在、約 150 パーツの情報を取得するのに約 15 ~ 20 秒かかります。パーツ数/パーツ名を取得するために作成しているクエリの時間を計りました (AJAX コードをコメントアウトしました)。パーツ数が多い場合、それらは 200 ミリ秒未満です。

どんな助けでも大歓迎です!

4

1 に答える 1

0

XML データ全体を解析し、ループ内で新しいオブジェクトを作成しています$(data)

代わりに、それをループの前に配置する必要があります。大きな違いが見られるはずです。更新されたコードの関連部分は次のとおりです。

...

var $data = $(data); // Do this once

while (covCnt >= i)
{

    part = DKB.GetClearedPart(i);  //Returns name of  part

    $data.find("part").each(function() {

    ...
于 2012-06-11T02:16:39.383 に答える