sitemap на php - скорость
Накидал за 10 минут скрипт генерации карты на пхп и был удивлен мега медленной скорости - в секунду примерно одна страница обрабатывается. Делаю через file_get_content далее explode.Кто нить делал подобное на пхп?
|
Так нарочно нужно скорость чуть уменьшить, что бы не положить донора.
По теме: читаю курлами, обрабатываю регулярками. PS: explode для поиска ссылок? О_о |
1 ссылка в секунду слишком долго, тем более локально на денвере тестирую , ладно бы там 10 ссылок ...
я же говорю накидал за 10 минут explode ("href=",текст) далее нашел кавычку и дальше. Причем делал пробывал два метода - рекурсией и циклом по стеку необработанных ссылок - скорость одна и та же . не думаю что от регулярных скорость повысится. |
так вы локалхост мучаете, и он отдает со скоростью 1 страница в секунду?
|
да , мучаю локалхост в инете тоже пробывал - работает не намного быстрее .... просто думаю на механизм, пробывал через сокеты та же скорость. Через аякс конечно будет быстрее, только вот в крон его не запихаешь ...
|
cuberboy,
не страдайте ерундой - preg_replace надо юзать, то ли я не писал парсеров... А вопрос всё же надо уточнить: вы работаете по cron и хотите скорость быстрее, чем 1 запрос в сек? Это я к чему спрашиваю. что может дело не в скрипте и методе подхода, а в том что крон чаще не может срабатывать? |
Сейчас попробую через регулярные, я как бы про парсеры тоже не первый раз слышу в основном по сайтам удобнее в разы пользовать связку explode далее обрезание strpos либо опять деление explode, это на опыте проедено )) по началу пользовал регулярные, но в итоге послал их.
Обратил больше внимания задержке "чтоб не положить донора" как итог - при секундной задержке(не задержка а скорость по факту такая) висит что локалхост что сайт в инете, прихожу к неутешительным выводам что на чистом пхп без того чтоб не повесить сервер карту не сделать? крон будет пускать там раз в сутки.. да и вообще можно без крон .. просто есть скрипт php, пускаем его он делает карту .... |
кронтаб в приниципе, чаще чем раз в минуту не запускается-там первый параметр-как раз минуты, а не секунды, т.е.
* * * * * php cron.php это раз в минуту, но это к делу опосредованно-я так понял, скрипт получил задачу и фоном себе отрабатывает. А посмотреть время выполнения участков - пробовали сделать? У курла есть детальный отчет внутри, на что ушло время-начиная с резолвинга ДНС итд, и потом-сколько ушло там на strpos и прочее ручками в лог пометить. потому что это ОЧЕНЬ надо постараться, что бы код выполнял такие простейшие операции как strpos порядка секунды, это сколько итераций он должен сделать. |
крон тут не причем - зачем делать карту чаще чем раз в секунду?
или имеет в виду скрипт отрабатывает 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,""); } ?> идея проста - два массив в одном проверенные ссылки в другом новые. |
Ну так где лог? "Тупит через минуту" на каких операциях? На каких данных?
|
Часовой пояс GMT +3, время: 08:41. |