Блог Ромки » Считаем секунды или ну негрузите меня.
Дек
29

Считаем секунды или ну негрузите меня.


0dc09226

Категория: Программируем

Блогун - монетизируем блогиИтак, раз уж я начал постить про парсеры и появляются варианты для одной и той же задачи - парсинга RSS потока, то задаётся вопрос, какой из них лучше? Проведём тест всех разновидностей, задачей будет каждым вариантом спарсить RSS поток этого блога и спарсить параметры title и link каждого поста. Будет 3 экземпляра парсеров для одной и той же задачи, а именно:

Итак, начну с исходного кода каждого из них:

Парсер, написанный на регулярках по статье Пишем RSS Reader:

1
2
3
4
5
6
7
8
9
10
11
12
$url="http://feeds.feedburner.com/romka?format=xml";
 
$xml = iconv('utf-8','windows-1251',file_get_contents($url));
 
$n = preg_match_all('!<item>.*<title>(.*)</title>.*<link>(.*)</link>.*</item>!Uis',$xml,$result);
if($n)
    {
    for($a=0;$a<$n;$a++)
        {
        echo "<a href='".$result[2][$a]."'>".$result[1][$a]."</a><br />";
        };
    };

Парсер, написанный по статье Парсер своими руками. Теория:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$url = "http://feeds.feedburner.com/romka?format=xml";
 
$page = iconv('utf-8','windows-1251',file_get_contents($url));
 
$page = str_replace("'", "\'", $page );
$page = str_replace("*", "555", $page );
$page = str_replace("<"."?xml ", "<"."?php $"."n=0; /"."*", $page );
$page = str_replace("</rss>", "*"."/ ?".">", $page );
$page = str_replace("<item>", "*"."/ $"."n++; /"."*", $page);
$page = str_replace("<title>", "*"."/ $"."title[$"."n]='", $page);
$page = str_replace("</title>", "'; /"."*", $page);
$page = str_replace("<link>", "*"."/ $"."link[$"."n]='", $page);
$page = str_replace("</link>", "'; /"."*", $page);
 
$f=fopen("file.php","w");
fwrite($f,$page);
fclose($f);
include('file.php');
 
for($a=1;$a<=$n;$a++)
    {
    echo "<a href='".$link[$a]."'>".$title[$a]."</a><br />";
    };

Парсер, написанный на SimpleXML:

1
2
3
4
5
6
$rss =  simplexml_load_file('http://feeds.feedburner.com/romka?format=xml');
 
foreach ($rss->channel->item as $item) 
	{
	echo "<a href='". $item->link. "'>". $item->title. "</a><br />";
	};

Все они загружают RSS поток и выводят все записи в виде названия пост со ссылкой. Теперь будем засекать время обработки кода. Делать это будем при помощи такого кода:

1
2
3
4
5
6
7
8
9
10
11
$mtime=microtime();
$mtime=explode(" ",$mtime);
$tstart=$mtime[1] + $mtime[0];
 
////  Код парсера
 
$mtime=microtime();
$mtime=explode(" ",$mtime);
$tend=$mtime[1] + $mtime[0];
$totaltime=($tend - $tstart);
printf ("%f", $totaltime);

Для эксперемента использую хостинг BH. Запускал скрипты примерно в одно время по 25 раз для каждого для достоверности данных. Вот таблица результатов:

Как видно, больших отличий по времени нету, но есть большие отличаи по объёмности кода. Ясно видно, что использовать SimpleXML намного удобнее, чем что либо другое. Тем более, что парсеры №1 и №2 чувствительны к смене структуры, а в парсере №2 должен присутствовать файл file.php с CHMOD 666, что так же неудобно.

Вердикт: Для написания скрипта, использующего каким-либо образом RSS лучше всего применять SimpleXML!


Один комментарий к “Считаем секунды или ну негрузите меня.”

  1. Владимир | Апр 16, 2022

    ПХП5 породнился окончательно с xml, благодаря simpleXML