Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> При обработке большого массива браузер виснет 
:(
    Опции темы
Elliner
Дата 4.4.2013, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 18.4.2007

Репутация: нет
Всего: нет



(сразу скажу, что я сисадмин, а не программист, но написать кусок кода необходимо).

Скрипт с интервалом запрашивает данные с сервера, получая ответ в формате json.
Далее с помощью цикла each обрабатывается каждый элемент и пихается в функцию, которая уже расфасовывает данные в определенную ячейку таблицы на сайте.

Код

function update_data(){
   
    setTimeout(function(){
        getIPList();
        update_data();
    },
    5000);
}

function getIPList(){
    $.getJSON('all_entries.php', function(json){
        if (json.iplist.length > 0){
               $.each(json.iplist, function(){
                  insert_row(this);
            });
        }
    });
}

function insert_row(ira){
   $('#'+ira['ip_dex'] +' .ip').text(ira['ip']);
   $('#'+ira['ip_dex'] +' .dns').text(ira['dns']);
 $('#'+ira['ip_dex'] +' .mac').text(ira['mac']);

Код

<table>
<tr id="333333333">
<td class="ip"><td>
<td class="dns"></td>
<td class="mac"></td>
</tr>
</table>


Все работает, но каждый раз при занесении данных (перерисовке таблицы) браузер "подвисает". Я так понял, подвисает он до тех пор пора не занесет ВСЕ данные на страницу...
Хочу узнать, существует ли решение, которое позволит "растормозить" браузер, например возвращать управление браузеру в промежутках между обработкой каждого элемента массива с json-данными?

Надеюсь относительно понятно сформулировал вопрос. Спасибо!

Это сообщение отредактировал(а) Elliner - 4.4.2013, 16:19
PM MAIL   Вверх
KuZyagroup
Дата 4.4.2013, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


magento solution
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 16.4.2007
Где: Kiev

Репутация: 1
Всего: 4



Elliner, 
В вашем случае есть смысл склеить весь вывод  одну строку и потом удалить старую таблицу и вставить новую, если браузер подвисает, и нету сложностей с тем что на таблицу навешены какие то события которые геморойно перезапускать(думаю что нету) 
PM MAIL   Вверх
Aliance
Дата 4.4.2013, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137




M
Aliance
Все же лучше следовать правилу: 1 тема - 1 вопрос


А зачем на 13 строчке возврат данных? При таком подходе $.each(json.iplist не выполнится никогда. А что делает функция update_data? Или она не важна в контексте вопроса?

Растормозить браузер можно, например, сократив кол-во данных в одной пачке (посылать несколько запросов - в целом не очень красивое решение), либо вызывать цикл не по всему массиву, а по части (chunk), когда закончится - вызывать снова по следующему куску.
PM MAIL WWW ICQ Skype   Вверх
Elliner
Дата 4.4.2013, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 18.4.2007

Репутация: нет
Всего: нет



KuZyagroup
Сразу вопрос, таблица не маленькая, в реальных условиях минимум 200 строк и 15 колонок. Будет ли такая перерисовка незаметна для пользователя?
Плюс в таблице должны быть столбцы с input полями (на них по классу навешано событие onchange + с отправкой данных). Планировалось, что при редактировании данных в определенной строке, эта строка обновляться не будет (путем навешивания какого-нибудь аттрибута).


Aliance, Исправил (ошибка вкралась... smile )
Сам склонялся к подобному решению, но нехватает знаний по реализации... 
Родной функции array_chunk насколько я понимаю в JS нет?

update_data,... используется для многократного повторения функции getIPList c задержкой.

Это сообщение отредактировал(а) Elliner - 4.4.2013, 16:17
PM MAIL   Вверх
KuZyagroup
Дата 5.4.2013, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


magento solution
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 16.4.2007
Где: Kiev

Репутация: 1
Всего: 4



Elliner
Будет ли такая перерисовка незаметна для пользователя? -> Думаю будет не заметной
на них по классу навешано событие onchange + с отправкой данных --> надо будет повесить еще раз

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0728 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.