0

サーバーで処理する巨大なファイルがあります。ファイルをサーバーにアップロードしてから読み取り、配列を作成します。次に、その情報をサーバーに戻す必要があります。

function getXMLFile(file){ // Single call
  $.ajax({
    url: '....', 
    type: 'post',
    dataType: 'json',
    data: {filename: file},
    success: function(json){
      $.each(json, function( key, value ){ // iterates over 50 000 items.
      tmp.push( value );
      i++;
      if(i > 10000){
        setTimeout(function(){ 
        insert(tmp); 
        tmp = []; 
        i = 0; 
        }, 1000);
      }
    });
   }
  });
}

そして、ここにロック機能があります:

function insert(data){ // called from getXMLFile() @data -> array of 10 000 code entries
    $.ajax({
      url: '....', // for now php function does nothing.
      type: 'post',
      dataType: 'json',
      data: {codes: data},
      async: true // !!!!
    });
  }
});

ご覧のとおり、ブラウザがロックされないように、「async: true」と setTimeout を使用しています。しかし、それはまだロックダウンしています.私は何か間違ったことをしましたか?

4

1 に答える 1

2

ファイルをサーバーにアップロードすると、サーバーから大量のデータが返されます。データから約 50000 項目を反復処理し、10000 回の反復ごとに、常に増加する配列を要求します。大規模なデータでは、1 秒ごとに約 5 件のリクエストが発生します。

ブラウザのパフォーマンスに影響を与えることは理にかなっています。サーバーで作業できるものは何でもサーバーで作業することをお勧めします。たとえば、サーバーから初めて返されたデータは、クライアントから大量のデータを要求してデータを再度送信することなく、サーバーによって処理することもできます。この方法で、ブラウザのパフォーマンスの低下を改善できます。

この問題を解決するには、ブラウザのメモリ消費量を確認し、小さなデータ セットで作業してみてください。ブラウザがロックダウンされていない場合は、クライアント側で処理しようとしているデータが多すぎることがわかります.

于 2013-10-31T09:02:45.430 に答える