JQuery AJAX асинхронная блокировка браузера

У меня есть огромный файл для обработки на сервере. Я загружаю файл на сервер, затем читаю его, создавая массив. Теперь мне нужно вернуть эту информацию на сервер:

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 ответ

Решение

Вы загружаете файл на сервер, затем сервер возвращает много данных. Из данных вы перебираете около 50000 элементов, затем вы делаете запрос каждые 10000 итераций с массивом, который постоянно увеличивается. Вы получаете около 5 запросов в секунду с большими данными.

Имеет смысл повлиять на производительность вашего браузера, я предлагаю работать на сервере, где бы он ни работал. Например, данные, возвращенные с сервера в первый раз, также могут быть обработаны сервером без отправки запросов с большими данными от клиента для повторной отправки данных. Таким образом вы улучшите низкую производительность вашего браузера.

Чтобы помочь вам решить эту проблему, посмотрите на потребление памяти вашим браузером, а также попробуйте работать с небольшим набором данных. Если ваш браузер не блокируется, то вы будете знать, что данные, которые вы пытаетесь обработать на стороне клиента, являются слишком большими.

Другие вопросы по тегам