0

js では、ajax を介してサーバーを呼び出しています。サーバーは、DOM に挿入する必要がある処理済みデータを返します。

$.fn.loadChildren = function() {
  var $li = $(this);

  ajaxQueue.add({
    url:     "myUrl.to",
    data:    "mydata",
    success: function(data) {

      $li.find("ul").html(data);
      ....

問題は、データが非常に巨大な文字列になる可能性があることです。その場合、FF で「このページのスクリプトがビジーであるか、応答を停止している可能性があります...」というエラー メッセージが表示されます。

html の代わりに replaceWith を使用してみましたが、まだ同じ問題があります。

すべてのブラウザーで DOM の挿入に制限があることは知っていますが、jQuery の最適化で他に試してみることができることはありますか?

ありがとう

4

2 に答える 2

3

おそらくセレクターを絞り込みますか?

$("#myul").html(data);

データをチャンクしてみてください。このようなものは、パフォーマンスを少し改善するのに役立つはずです。

var chunks = [];
var counter = 0;

chunks = breakApartDataIntoChunks(data);

setTimeout(function() { processChunk(chunks, counter); }, 0);

function processChunk(chunks, counter) {
    if (counter < chunks.length) {
        // insert this chunk into dom here
        $li.find("ul").append(chunks[counter]);
        counter++;
        setTimeout(function() { processChunk(chunks, counter); }, 1);
    }
}
于 2013-05-28T16:33:37.540 に答える
1

あなたが返すものはHtmlの巨大な部分ではないと思いますが、リストやテーブルなどの多くの要素は、htmlを返す代わりに、それらの要素を含むJSON配列を返し、それらを挿入することです1つずつ、次のようなもの:

//response = ['<div>One Element</div>', '</div>Another Elmenet</div>']
for(var i = 0; i < response.lenght; i++) {
     $('ul#myElement').append($('<li>').html(response[i]));
}

それが役に立てば幸い

于 2013-05-28T16:56:19.383 に答える