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 回答