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&amp;altura=405&amp;crop=true&amp;imgCrop=center&amp;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;
Author: Maykel Esser, 2017-02-10

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 всегда будет в курсе, каждую минуту. Поэтому, когда пользователь обращается к странице, будет читать файл, который уже находится на вашем сервере, это бесконечно быстрее, чем ждать ответ от сервера, внешнего каждого подключения.

Вы также можете создать базу данных, если хотите, и идти обновление при появлении новых публикациях, во всяком случае, несколько вариантов...

 4
Author: Inkeliz, 2017-02-10 23:47:27