Брати Гадюкіни Брати Гадюкіни 2016-08-10 16:20
Лайфхаки для форумного доргена.

Получать контент с сайтов лучше не через foreach, а используя rollingcurl-класс

Автокрон без залипания - http://pastebin.com/QPdqPeA1

Получать контент лучше через поднятие своего сервиса на отдельном сервере/впс используя простую либу php-boiler-pipe https://github.com/dotpack/php-boiler-pipe

Ответы:
Mik Foxi Mik Foxi #60458 2016-08-10 16:29
Хуйня это )) причем тут foreach ? это просто цикл. и менять простой проверенный php curl на какой-то роллингкурл это вообще хз че за такое.

Брати Гадюкіни Брати Гадюкіни #60459 2016-08-10 16:48
Mik Foxi, Ты просто его не пробовал. Это надстройка над классическим курлом, но он типа асинхронный. Т.е. парсинг будет идти не 60 секунд, а не более 10. Я например обрубаю соединение, если контента нет более 5 секунд.

Mik Foxi Mik Foxi #60460 2016-08-10 17:02
уПопаБылаСобака, жжош. у нас пхп скрипт, он как бы в один поток идет, он быстрее не будет работать. а 2 пхп скрипта отдельно запущенных - это 2 потока и так. А CURLOPT_TIMEOUT я тож добавил во все.

Брати Гадюкіни Брати Гадюкіни #60461 2016-08-10 17:06
Mik Foxi, Ты однозначно не в курсе, что курл бывает многопоточным.

Mik Foxi Mik Foxi #60462 2016-08-10 17:30
уПопаБылаСобака, но php однопоточное. Как ты запустишь в одном php скрипте что-то многопоточно? )))

Брати Гадюкіни Брати Гадюкіни #60466 2016-08-10 17:57
Mik Foxi, Вопросы не ко мне https://github.com/chuyskywalker/rolling-curl

doorwaymoney doorwaymoney #60467 2016-08-10 18:00
Mik Foxi, ну так скрипт запрашивает разу n соединений, не дожидаясь ответа от них. А потом по факту прихода данных - обрабатывает отдельно...Типа Rolling Curl. Парсится все в n раз быстрее...

Mik Foxi Mik Foxi #60468 2016-08-10 18:14
doorwaymoney, почитал, понял что они считают что все тупые, и юзеры и другие курлы и мультикурлы )))) при поверхностном рассмотрение врятли оно сделает заметное ускорение.

Mik Foxi Mik Foxi #60469 2016-08-10 18:15
уПопаБылаСобака, можешь мне скинуть пример твоего кода, который стал супер ускоренным? )

Mik Foxi Mik Foxi #60470 2016-08-10 18:21
Можешь и этот поизучать http://php.net/manual/ru/function.curl-multi-init.php мультикурл без всяких оберток.

doorwaymoney doorwaymoney #60471 2016-08-10 18:24
Mik Foxi, Когда требуется спарсить 1 лям урлов, на много быстрее. Если просто тупо обходить курлом, допустим страница отдается в среднем за 7 секунд, получается 7 лямов секунд, или 81 день Запускаем то же самое но через rolling curl или аналог, на 20 потоков допустим, и допустим что 20 потоков не убивает сервер. Получаем 20 запросов за тех же 7 секунд. То есть уже речь идет о 350 тыс. секундах. Ставим поток 50, и уже остается 140 тыс секунд, или 2-ое суток, взамен 81....

Mik Foxi Mik Foxi #60472 2016-08-10 18:26
doorwaymoney, да я понял уже. Только пока лень думать как в текущем доргене все это сгруппировать из всех парсеров, которых может быть набор из разного количества.

Mik Foxi Mik Foxi #60473 2016-08-10 18:28
doorwaymoney, тем более что надобности ускорять парсинг нету. во много потоков все равно не пустишь наполнение, база повиснет.

Брати Гадюкіни Брати Гадюкіни #60474 2016-08-10 18:43
Mik Foxi, Если процес заканчивает свою работу бестрее в n-раз, как думаешь, нагрузка на проц будет падать?

Mik Foxi Mik Foxi #60476 2016-08-10 18:54
уПопаБылаСобака, когда одновременно куча процессов - нагрузка на проц и память будет расти. Если ты правильно все сделал, то скорость улучшишь, но нагрузку на проц и оперативку ты тоже увеличишь, а это не гуд.

doorwaymoney doorwaymoney #60484 2016-08-10 20:12
Mik Foxi, Ну тут такой момент.Допустим на страницу выводится текст скомпилированный из 7 источников. На каждый источник 2-3 секунды (ожидание от сервера), получается время генерации страницы 14-21 сек. Что есть много. Если источники опрашиваются одновременно, то будет 2-3 сек. Но тут еще влияет макс. время ожидания. Если один источник подвис, то будет условно 10 сек, в случае мульти запросов, или более 20 сек в случае последовательных.