Performance file get contents()
и Я взяв содержимое RSS-Канал, созданный Wordpress, и даже принес информацию, с небольшой задержкой (по Google PageSpeed Insights, возникли задержки от 1 до 2.5 сек).
Хотел бы знать, если это из-за моего фрагмента кода или RSS-Канал в себя.
PS: комментируя этот фрагмент кода, сайт течет, как обычно.
$feed = file_get_contents('http://blog.exal.com.br/feed');
$rss = new SimpleXmlElement($feed);
$contadorNoticias = 0;
foreach($rss->channel->item as $post) {
if($contadorNoticias < 3){
$imagemNoticia = "/common/function/thumb.php?largura=730&altura=405&crop=true&imgCrop=center&url=".$post->enclosure['url'];
$listaNoticia .= "
<div class=\"col-sm-4\">
<a class=\"itemOpacity\" href=\"".$post->link."\" title=\"Ir para: Notícias > ".$post->title."\">
<img src=\"".$imagemNoticia."\" alt=\"Imagem: ".$post->title."\" class=\"img-responsive\" />
<h2>".$post->title."</h2>
<p>".str_truncate(strip_tags($post->description),220)." [...]</p>
</a>
</div>";
}
else{
break;
}
$contadorNoticias++;
}
echo $listaNoticia;
1 answers
Это происходит, исключительно потому, что вы загружаете внешний контент. При каждом запуске он будет соединяться с http://blog.exal.com.br/feed
, будет искать IP-адрес и подключиться, то будет ждать ответа веб-сайт и получить данные, скачать, затем запустить остальную часть кода, основанный на том, что было получено, это так просто.
, Если вы делаете:
curl "http://blog.exal.com.br/feed/" -o /dev/null -w "Tempo para conectar: %{time_connect}\nTempo para começar transferencia: %{time_starttransfer}\nTempo Total: %{time_total}"
В Windows используется: -o null
, чтобы удалить предупреждение - Failed writing body
, потому что не существует /dev/null
в Windows. :S
Это будет указано время, которое потребовалось, чтобы ваш сервер (или любой другой прибор) для подключения и получения данных с другого веб-сайта.
В моих тестах:
Tempo para conectar: 0.154
Tempo para começar transferencia: 1.501
Tempo Total: 1.878
Tempo para conectar: 0.031
Tempo para começar transferencia: 1.406
Tempo Total: 1.406
Tempo para conectar: 0.137
Tempo para começar transferencia: 1.184
Tempo Total: 1.557
...
Tempo para conectar
(time_connect
): указывает время, необходимое для ЛОКОН создать TCP-соединение, даже если правильно подключиться с сервера (или прокси-сервера).Tempo para começar transferencia
(time_starttransfer
): указывает время, необходимое для CURL получения первого байта ответа, это время, которое потребовалось чтобы РОТОР начал получать какие-либо данные.Tempo Total
(time_total
): показывает общее время, которое потребовалось, чтобы получить результат.
, Где эта проблема?
Основная проблема заключается в самом сайте, который генерирует канал (http://blog.exal.com.br/feed
), поскольку он занимает в среднем 1350 миллисекунд, чтобы вернуть информацию, или для того, чтобы начать возвращать, так долго, что вашем веб-сайте также просмотреть такую информацию.
Решить?
Зависит от того, есть достаточно информации в вопросе, вопрос на самом деле был всего лишь "Хотел бы знать, если это из-за моего фрагмента кода или RSS-Канал в себя."это ответил выше.
Тем не менее, существует несколько решений, которые можно сделать НА ЕГО СТОРОНЕ.
Используйте кэш:
, Потому что необходимо подключиться каждый час с другого сайта? Он обновляет, как и в какой срок?
Вариант-это создать, сделать cronjob
сохранить в файл /cache/feed
и носите его всегда.
Создайте atualizaFeed.php
:
$getFeed = file_get_contents('http://blog.exal.com.br/feed');
file_put_contents('alguma/pasta/feed.xml', $getFeed);
Создайте cronjob
, например: * * * * * php atualizaFeed.php
, можете использовать crontab -e
редактировать via vi
.
, Вы можете просто забыть о PHP и использовать непосредственно:
* * * * * curl "http://blog.exal.com.br/feed/" -o /alguma/pasta/feed.xml
. ;)
Затем просто загрузите данные из файла, который обновляется каждую минуту, с помощью:
$feed = file_get_contents('alguma/pasta/feed.xml');
$rss = new SimpleXmlElement($feed);
//...
Файл alguma/pasta/feed.xml
всегда будет в курсе, каждую минуту. Поэтому, когда пользователь обращается к странице, будет читать файл, который уже находится на вашем сервере, это бесконечно быстрее, чем ждать ответ от сервера, внешнего каждого подключения.
Вы также можете создать базу данных, если хотите, и идти обновление при появлении новых публикациях, во всяком случае, несколько вариантов...