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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна помощь в оптимизации 
:(
    Опции темы
Gobl1n
Дата 3.7.2013, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет.
Есть работающий код, но он очень медленно работает.
Нужны советы, как его можно оптимизировать и в какую сторону копать?)

Код

function get_console(steams){
var text = "";
var c = steams.length;
var tmp = "";
 for (var i=0;i<c;i++){
  var url = steams[i].split("&").join("^");
   var tbldata = new XMLHttpRequest();
   tbldata.open('GET', 'include/xmlrequest.php?q=console&url='+url, false);
   tbldata.onreadystatechange = function() {
   if (tbldata.readyState == 4) {
    if(tbldata.status == 200) {
      var iCheck = new Array();
      var text = tbldata.responseText;
      iCheck = text.split("|");
      var tag_console = "check_console["+i+"]";
      var tag_eac = "check_eac["+i+"]";
      console.log("check "+i+" of "+c);
      document.getElementById(tag_console).innerHTML = iCheck[0];
      document.getElementById(tag_eac).innerHTML = iCheck[1];
    }
   }
   };
   tbldata.send(null);
  }
  document.getElementById('working').innerHTML = "";
}


Размер массива от 200 до 35000 элементов. Время выполнения от 2 минут до 4 часов (это нормально).

Самое главное, как сделать, чтобы страница не замораживалась во время выполнения цикла? А то ведь даже инфу о стадии процесса не вывести, кроме как в консоль.
PM MAIL   Вверх
CruorVult
Дата 4.7.2013, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

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



Можно слать не все запросы подряд, а по порциям. Вот здесь обсуждалось похожее.
Таким образом браузер не повесится. Но на скорость выполнения запросов это никак не повлияет.

PM MAIL Skype   Вверх
AVA12
Дата 4.7.2013, 13:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
tbldata.open('GET', 'include/xmlrequest.php?q=console&url='+url, false);

Угу. Синхронные запросы. На 4 часа. Это специально так сделано или просто тупо скопипащено из примера?
PM ICQ Jabber   Вверх
Evghenusi
Дата 5.7.2013, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

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



Цитата(AVA12 @  4.7.2013,  13:11 Найти цитируемый пост)
Это специально так сделано или просто тупо скопипащено из примера? 

~35000 запросов асинхронно, да да да  smile (в скрипт не вникал)
PM WWW   Вверх
Gobl1n
Дата 5.7.2013, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну блин, вот я и попросил помощи.
Если я их делаю синхронно - не получается вставить результат.
Много чего пробовал.
PM MAIL   Вверх
Evghenusi
Дата 5.7.2013, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

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



Цитата(Gobl1n @  5.7.2013,  12:17 Найти цитируемый пост)
Ну блин, вот я и попросил помощи.

И вас в правильную сторону отправили.
Цитата(CruorVult @  4.7.2013,  12:23 Найти цитируемый пост)
Вот здесь обсуждалось похожее.


PM WWW   Вверх
akizelokro
Дата 6.7.2013, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

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



Какая разница, как делать 35000 запросов, синхронно или асинхронно.
php файл переписывать, отправлять методом POST и закидывать url'ы хотя бы кусками по 100 штук.

Если уж никак..
Чтобы страница не замораживалась во время цикла, есть такое средство как WebWorker. По-моему, оно должно работать с ajax-запросами. И вариант как сделать подобие многопоточности в скрипте.
Недавно только отлаживал новую либу француза чтоли для работы с zip-ованными архивами. Вроде нормально работает и с WebWorker (IE только с 10, Сафари с 6ки).


Не уверен, что вариант replace будет хуже, чем
Код

var url = steams[i].split("&").join("^");


Оцени время на вывод ошибки в консоль. Может, нужно выводить пореже. Помню, как на первых компах вывод занимал достаточно много времени. Функции поменяй, чтобы можно было передавать параметр i.

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


 




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


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

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