Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   sitemap на php - скорость (https://javascript.ru/forum/server/26105-sitemap-na-php-skorost.html)

cuberboy 26.02.2012 12:38

sitemap на php - скорость
 
Накидал за 10 минут скрипт генерации карты на пхп и был удивлен мега медленной скорости - в секунду примерно одна страница обрабатывается. Делаю через file_get_content далее explode.Кто нить делал подобное на пхп?

Serg_pnz 26.02.2012 13:07

Так нарочно нужно скорость чуть уменьшить, что бы не положить донора.
По теме: читаю курлами, обрабатываю регулярками.
PS: explode для поиска ссылок? О_о

cuberboy 26.02.2012 17:28

1 ссылка в секунду слишком долго, тем более локально на денвере тестирую , ладно бы там 10 ссылок ...

я же говорю накидал за 10 минут explode ("href=",текст) далее нашел кавычку и дальше. Причем делал пробывал два метода - рекурсией и циклом по стеку необработанных ссылок - скорость одна и та же .

не думаю что от регулярных скорость повысится.

Rootpassword 26.02.2012 17:34

так вы локалхост мучаете, и он отдает со скоростью 1 страница в секунду?

cuberboy 26.02.2012 19:31

да , мучаю локалхост в инете тоже пробывал - работает не намного быстрее .... просто думаю на механизм, пробывал через сокеты та же скорость. Через аякс конечно будет быстрее, только вот в крон его не запихаешь ...

Serg_pnz 26.02.2012 19:43

cuberboy,
не страдайте ерундой - preg_replace надо юзать, то ли я не писал парсеров...

А вопрос всё же надо уточнить: вы работаете по cron и хотите скорость быстрее, чем 1 запрос в сек?
Это я к чему спрашиваю. что может дело не в скрипте и методе подхода, а в том что крон чаще не может срабатывать?

cuberboy 26.02.2012 19:56

Сейчас попробую через регулярные, я как бы про парсеры тоже не первый раз слышу в основном по сайтам удобнее в разы пользовать связку explode далее обрезание strpos либо опять деление explode, это на опыте проедено )) по началу пользовал регулярные, но в итоге послал их.

Обратил больше внимания задержке "чтоб не положить донора" как итог - при секундной задержке(не задержка а скорость по факту такая) висит что локалхост что сайт в инете, прихожу к неутешительным выводам что на чистом пхп без того чтоб не повесить сервер карту не сделать?

крон будет пускать там раз в сутки.. да и вообще можно без крон ..

просто есть скрипт php, пускаем его он делает карту ....

Rootpassword 26.02.2012 20:05

кронтаб в приниципе, чаще чем раз в минуту не запускается-там первый параметр-как раз минуты, а не секунды, т.е.
* * * * * php cron.php
это раз в минуту, но это к делу опосредованно-я так понял, скрипт получил задачу и фоном себе отрабатывает.
А посмотреть время выполнения участков - пробовали сделать? У курла есть детальный отчет внутри, на что ушло время-начиная с резолвинга ДНС итд, и потом-сколько ушло там на strpos и прочее ручками в лог пометить. потому что это ОЧЕНЬ надо постараться, что бы код выполнял такие простейшие операции как strpos порядка секунды, это сколько итераций он должен сделать.

cuberboy 26.02.2012 21:57

крон тут не причем - зачем делать карту чаще чем раз в секунду?

или имеет в виду скрипт отрабатывает 30 секунд( в случае ограничения времени ан сервере и не возможности его снять) далее скажем каждые 5 сек сохраняем результат куданить (ну тут опять операции ввода вывода ёмкие ...) ,дебри, задача была в том чтоб раз или два в сутки запускался крон и отрабатывал пхп в фоне, пусть ограничения по времени нету.

делал через file_get_content() , не через курл - думал отработает быстрее.

вставил в кусок разбора страницы регулярное не помогло ... напсиал всё с нуля заработало быстрее !!!! но через минуту опять "тупит", но всё же ))))

вот код
<? set_time_limit(600); $server=$_GET[server]; if(!$server) {echo "<form ><input name=server><input type=submit></form>";exit;}

function parse($index,$s){global $server;global $link;  global $file; global $url2;
if($index=="/") {$index="";}
$link["$index"]=1;  $adr="http://$server/$index";  echo " [".count($url2)."] ".microtime(true)." ".$adr."<br/>";   flush();

$str=@file_get_contents($adr);/*$str=iconv("utf-8","windows-1251",$str);//опционально*/if(!$str) { echo "<b>"."http://$server/$index"."</b>";return 0; }

//@preg_match_all('/<a\s([^<]*?)href=[\'\"]?(?!https?:|mailto:|ftps?:)(\.{0,2}\/)?([^<>\'\"]+)[\'\"]?/im',$str,$rez);
  @preg_match_all('/<a\s([^<]*?)href=[\'\"]?(\.{0,2}\/)?([^<>\'\"]+)[\'\"]?/im',$str,$rez);
foreach($rez[3] as $nom=>$newurl){
if($link[$newurl]!=1){$url2[]=$newurl;  $link[$newurl]=1;}
}
}

$url2[]="/";
while(count($url2)){
$url3=array_pop($url2);
parse($url3,"");
}
?>


идея проста - два массив в одном проверенные ссылки в другом новые.

Rootpassword 26.02.2012 22:12

Ну так где лог? "Тупит через минуту" на каких операциях? На каких данных?

cuberboy 26.02.2012 23:32

Да как то - на одних сайтах летает, на других тупит вне зависимости от метода парсинга - убрал рекурсию через рекурсию почему то долго делал ...

Rootpassword 26.02.2012 23:36

Ну так у вас страница на сервере, которую вы запрашиваете, может и секунду генерироваться, это вполне приемлемо, если там не статика


Часовой пояс GMT +3, время: 00:06.