0

XMLファイルを読み取り、HTMLページのリストにコンテンツを解析するどこかから入手したjQuery XMLファイルパーサーがあります。

$(document).ready(function(){
    $("#dvContent").append("<ol></ol>");
    $.ajax({
            type: "GET",
            url: "BookList.xml",
            dataType: "xml",
            success: function(xml){
                $(xml).find('Book').each(function(){
                    var sTitle = $(this).find('Title').text();
                    var sPublisher = $(this).find('Publisher').text();
                    $("<li></li>").html(sTitle + ", " + sPublisher).appendTo("#dvContent ol");
                });
        },
        error: function() {
                alert("An error occurred while processing XML file.");
        }
    });
});

私の XML ファイルには約 24000 行あり、それぞれ 6500 行がタグです。Chrome は約 1 秒以下で 6400 をすべてループできますが、IE8 は 1228 行で上限に達するようです。

これは IE8 がこのループを無限と解釈し、そのプロセスまたはその他の何かを停止させるのでしょうか?

よろしくお願いします。

4

1 に答える 1

1

DOM に何度も追加すると、パフォーマンスが低下します。一度追加する必要があります。また、毎回追加する場所を調べるのはコストがかかります。

$("<li></li>").html(sTitle + ", " + sPublisher).appendTo("#dvContent ol");

また、毎回 $(this) を検索すると、新しい jQuery オブジェクトが作成されるため、コストがかかります。

var sTitle = $(this).find('Title').text();
var sPublisher = $(this).find('Publisher').text();

したがって、このようなものはもう少しパフォーマンスが向上するはずです

var outHTML = "";
$(xml).find('Book').each(function(){
    var book = $(this),
        sTitle = book.find('Title').text(),
        sPublisher = book.find('Publisher').text();
    outHTML += "<li>" + sTitle + ", " + sPublisher + "</li>");
});
$("#dvContent ol").append(outHTML);

結局 6400 個の項目をページに追加するのは大変なので、データを別の形式で表示した方がよいかもしれません。

于 2012-08-20T03:52:02.760 に答える