Зависание браузера при выполнении скрипта

ghaiklor

Новичок
Привет всем.

И вот снова у меня возникла проблема.
Есть скрипт, который выполняет аякс-запрос к БД, но он долго выполняется, т.к. инфы много и ее всю нужно проанализировать. Каким образом можно сделать загрузку всей информации "на фоне"? Чтобы браузер не зависал при этом.

P.S. Такая необходимость нужна только при первой загрузке страницы. Происходит считывание всей инфы и генерация соответствующей таблицы с этой инфой. В дальнейшем будет намного меньше считываться информации, поэтому не думаю, что он будет постоянно глючит.

Заранее спасибо за помощь.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Даже не знаю, как бы так попонятней ответить.

1. Запроса нет.
2. Эксплейн запроса не приведен.
3. Структуры таблиц не приведены.
4. Кода не приведено вообще.

Заранее пожалуйста.
 

ghaiklor

Новичок
PHP:
function T_loadElementsMonitoringAll() {
    function onLoaded(response) //функция обработки запроса в случае успеха
    {
        T_response = response;
        T_clearElementsMonitoring(); //очищаем таблицу от данных
        M_clearMarkers(); //очищаем карту от маркеров
        var i = 0; //переменная-итератор для цикла обработки данных
        var string_html = null;
        while (i < T_response.length) { //до тех пор, пока мы не обработаем все данные
            if (T_response[i].carLatitude != '-777' && T_response[i].carLongitude != '-777') { //если есть данные о местоположении машины
                T_addEnabledMarkerOnMap(i);
                string_html = '';
            //генерируем строку HTML для добавления в случае, если координаты есть
            } else {
                T_addDisabledMarkerOnMap(i);
                string_html = '';
            //генерируем строку HTML для добавления в случае, если координат нету
            }
            T_monitoring_units_target.innerHTML += string_html;
            i++; //увеличить итерацию
        }
    }
    
    $.ajax({ //запрос к скрипту
        type: 'GET',
        url: "ajx/db_getData.php",
        data: 'getAllData=true',
        dataType: 'json',
        success: function (response) {
            onLoaded(response); //в случае успеха вызываем функцию обработки данных
        },
        error: function() {
            console.log('Error on AJAX-request!'); //иначе выводим ошибку в консоль
        },
        cache: false
    })
}
Эта функция обрабатывает JSON-строку, полученную от скрипта. Как видите, много итераций и именно эти итерации клинят браузер.
Сам скрипт отвечает быстро и правильно, в файрбаге все проверялось и отлаживалось.
Проблема в том, что не знаю как придумать, чтобы браузер не зависал из-за того, что скрипт еще работает.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Сколько итераций там? Что делает T_addEnabledMarkerOnMap()? То есть может быть там есть узкое место?

PS: JS код надо располагать как можно ниже к концу документа, довольна известная практика.
 

ghaiklor

Новичок
PHP:
function T_addEnabledMarkerOnMap(i) {
    var position = new google.maps.LatLng(T_response[i].carLatitude, T_response[i].carLongitude); //создаем новый объект позиционирования с координатами машины
    M_addMarker(M_map, position, null, false, T_response[i].carID, '../images/0.png', T_response[i].carID); //добавляем маркер на карту                
}

/**
 * Фукнция добавления неактивного маркера
 * @param i ID
 * @return void
 */
function T_addDisabledMarkerOnMap(i) {
    M_addMarker(null, null, null, false, T_response[i].carID, '../images/0.png', T_response[i].carID);
}
Эти функции вызываются с того цикла, что я написал выше. Просто по одной команде, ничего нету узкого.
Итераций может быть сколько угодно, но зачастую около 200 итераций идет, больше еще не видел. Вся сложность заключается, я так понял, в генерации HTML. Когда он JSON парсит и добавляет в HTML. Может быть из-за этого? Там огромный кусок HTML кода каждый раз генерируется и этот кусок добавляется к уже существующим в таблице.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Кхм, а сгенерить все сразу и потом вставить в таблицу?
 

ghaiklor

Новичок
Информация в БД постоянно обновляется. Может быть новая запись в БД. Если генерить все сразу, то ради этой одной новой записи потом всю таблицу перестраивать?
 
Сверху