У меня был очень похожий опыт, но я остановился на другом решении.
Я тоже тестировал скрипт на 8 ядерном 32 гб дедике с широким каналом и там еле еле 10 потоков шло.
Работающими решением оказалось взять 32 ядерный локальный сервер с 64 оперативки, на не очень быстром канале, с сокс5, на нем 100+ потоков запускалось.
Скрипт тот же, никаких оптимизаций не делалось.
Стоит конечно побольше, чем аренда дедика но тут уж зависит от окупаемости твоей темы, стоит ли оно того или нет.
Но соксы могут быть узким местом, по возможности нужно делать свои соксы. Для этого, можно брать дешевые VPS и установить сокс через опенсурсный софт microsocks для линукса (в инете полно инструкций по установке, занимает не более 5 минут вручную, и можно установку через БАС автоматизировать также на случай если нужны сотни соксов).
Логика скрипта ( вопрос )
-
Привет!
Подскажите пожалуйста, как лучше организовать логику скрипта?( я уже голову сломал ибо только начал изучать JavaScript )
По-ходу основного скрипта перебираются объекты, по ссылкам, и над ними совершаются определенные действия...
Объекты есть двух типов. Условно говоря "А" и "В". Определить их не составляет труда ( проверить наличие объекта на странице )
С объектом "А" - работаем.
Объект "В" не трогаем и всячески игнорируем.А вот дальше у меня начинаются трудности...
Сначала я не мудрил - просто заходил на объект, проверял есть ли характерный элемент, записывал его в переменную и ставил блок ( IF - ELSE ) и дальше по плану.
Но этих объектов много (от 10 до 25 на странице ), и к десятому шагу я уже запутывался окончательно. Такая портянка блоков вырастала, что ппц!Потом вынес проверку в отдельную функцию и теперь не могу сообразить, как из функции вернуться к основному скрипту.
- Берем первый объект.
- Проверяем что это объект типа "А"
- Если да, ( Это объект А) то выполняем на нем действие.
- Если нет, ( Это объект В ), то ничего не делаем с ним и переходим к следующему.
Пробовал "установить метку" - "перейти к метке", но тоже не понимаю, как правильно написать...
В общем, буду рад любым советам.
Извините за глупые вопросы )п.с.
И еще один момент:
Есть таймер ожидания вида "минуты:секунды". Например 2:30
Как то можно записать его в переменную в секундах, чтобы выставить сон или эмуляцию бездействия на это время ? Время часто меняется, так что заранее не угадать... -
@fox-mulder честно сказать трудно понять что ты хочешь сделать как я понял ты хочешь проверить один элемент если он есть выполняешь если его нет проверяешь второй элемент если и его нет идешь дальше а если второй элемент есть то делаешь другое действие?
-
Не совсем.
Попробую аналогию привести для понимания:
Есть магазины и склады. Они идут списком, в виде таблицы, но вперемешку.Мне нужны только магазины.
1.Я захожу по первой ссылке.
2. Определяю - магазин ли это по наличию элемента на странице.
( если элемент есть - значит магазин. Если нет - склад. И на основе этого ставлю блок "IF - ELSE" )
3. Если магазин - записываю цену , а затем перехожу ко второй ссылке.
4. Если склад - сразу перехожу ко второй ссылке ( с ним никаких действий )Затем те же действия со второй ссылкой, потом с третьей, десятой ... двадцатой.
-
@fox-mulder Это через список надо делать. Все объекты А у тебя должны быть в одном списке. Создаешь список SPISOK_OBEKTOV_A
далее добавляешь в него, по нужному критерию нужные тебе элементы.
Далее, обрабатываешь уже полученный список, например вот так
В действии получить элемент, нужно поставить галочку, удалить взятый в переменную элемент.
-
@fox-mulder я бы сначало отфильтровал обекты на А и Б и потом уже работал сними. @Samael_96 дело говорит ))
Ток вот я понять не могу почему у тебя вышло много if'ок? можно-же использовать одну, и перезаписовать переменную котокая в if'ке .
-
А если объекты обновляются ? Не ежесекундно, конечно, но довольно часто.
Вверху таблицы оказываются объекты с лучшей ценой. То есть, они часто меняются и нас интересует только первые несколько страниц таблицы.
В любом случае буду пробовать. Спасибо!Про "перезаписовать переменную которая в if'ке ." - не могу понять.
Видимо, знаний еще не хватает в JavaScripte ) -
@fox-mulder said in Логика скрипта ( вопрос ):
А если объекты обновляются ?
В этом случае нецелесообразно фильтровать объекты и работать с ними в разных циклах. Пусть все объекты обрабатываются одним циклом. Внутри цикла скрипт должен определить "сорт" объекта и работать с ними в зависимости от полученного результата.
Вообще, однотипные действия желательно обрабатывать потоками. Это быстрее, но будет жрать ресурсы сервера.