Какой самый быстрый способ разбора RSS-канала в PHP? - PullRequest
0 голосов
/ 05 октября 2011

Я вытащил 7 RSS-лент и разбора на нашем сайте. Но время разбора очень медленное, что является лучшим способом разбора RSS-канала в PHP.

Также есть ли способ использовать GZip для более быстрого анализа?

Я использую этот GZip в моем файле .htaccess, но без разницы

Вот скрипт GZip в моем файле .htaccess

# compress text, html, javascript, css, xml: AddOutputFilterByType
DEFLATE text/plain text/html text/xml text/css application/xml
application/xhtml+xml application/rss+xml application/javascript
application/x-javascript

Вот мой PHP-код для разбора RSS-каналов

<?php
function getFeed($feed_url){
    $content = file_get_contents($feed_url);
    $x = new SimpleXMLElement($content);

    for ($i=0; $i<=4; $i++){
        $entry = $x->channel->item[$i];

            // if promotion price is set, then use the promotion price instead of Normal Price
            $normal = $entry->NormalPrice;
            $promo  = $entry->PromotionPrice;

            // Get the links and titles
            $image = $entry->Image->Url;
            $link = $entry->link;
            $title = $entry->title;

            if((isset($promo)) && ($promo > 0)){
                $price = 'R '.number_format(trim($promo), 2);
            }else if($normal > 0 && $promo == 0){
                $price = 'R '.number_format(trim($normal), 2);
            }else if((empty($normal) && empty($promo)) || (($normal == 0) && ($promo == 0))){
                $price = 'Out Of Stock';
            }


                echo '<div class="rssImages">';
                echo '<div class="imageCover">';
                echo '<a href="'.$link.'"><img src="'.$image.'" /></a><br /><br />';
                echo '</div>';
                echo '<div class="rssCntImg">';
                echo '<a href="'.$link.'" id="rsslinks">'.$title.'</a> <br />';
                echo '</div>';
                echo '<strong>'.$price."</strong>";
                echo '<label class="cleared"></label>';
                echo '</div>';          
    }
}
?>

любая помощь / предложение будет оценено.

Ответы [ 3 ]

3 голосов
/ 05 октября 2011

Похоже, вы анализируете свои каналы в Интернете по каждому запросу пользователя.
Это всегда будет медленным.Знаете, это сеть.

Единственный разумный способ чтения RSS-каналов - это асинхронный один.Один сценарий для регулярного их анализа и обновления базы данных local , а другой - для отображения записей из локальной базы данных.

И, знаете, gzipping output очень малоделать с анализом входящих данных.Пойди разберись.

1 голос
/ 05 октября 2011

Я не уверен, что Gzip может оказать положительное влияние на время разбора, это уменьшит время загрузки, но это все.

Вам следует рассмотреть возможность использования парсера SAX вместо simplexml:

Php Doc о SAX Parser
Пример

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

посмотрите на этот ответ

0 голосов
/ 14 ноября 2011

Сводка комментариев и ответов:

  • Убедитесь, что вы анализируете только при необходимости, проверяете наличие обновлений отдельно и предоставляете информацию из локальной БД при запросах страниц.
  • Убедитесь, чтоЗадержка не связана с медленным откликом от удаленных серверов (опять же, это будет уменьшено за счет кэширования).
  • Если фиды не ОГРОМНЫ, подойдет любой синтаксический анализатор XML, и если они ОГРОМНЫ, это может бытьпричина задержки ...
  • GZip, как указано на стороне сервера, вы можете указать, что клиент (ваш скрипт) принимает gzip, используя, например, cURL, но использование cURL - это вопрос, который следуетспросил отдельно.В любом случае это ничего не изменит для уменьшения времени разбора.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...