jQuery ajax异步锁定浏览器

时间:2013-10-31 08:48:36

标签: jquery ajax loops asynchronous lockdown

我有大量文件要在服务器上处理。我将文件上传到服务器,然后读取它,制作数组。现在我需要将这些信息反馈给服务器:

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,这样我的浏览器就不会被锁定。 但它仍然锁定......我做错了什么?

1 个答案:

答案 0 :(得分:2)

您正在将文件上传到服务器,然后服务器返回大量数据。从您迭代大约50000个项目的数据,然后您每10000次迭代请求一个不断增加的数组。您最终每1秒钟就会收到大约5个大数据请求。

对浏览器的性能产生影响是有意义的,我建议在服务器上工作,无论在那里工作。例如,第一次从服务器返回的数据也可以由服务器处理,而不需要来自客户端的大数据请求再次发送数据。这样,您将改善浏览器的糟糕性能。

为了帮助您解决此问题,请查看浏览器的内存消耗情况,并尝试使用小型数据集。如果您的浏览器没有锁定,那么您将知道您尝试在客户端处理的数据太多。