Проблема с echo. Сильно замедляется работа скрипта.

tolik777

Новичок
Проблема с echo. Сильно замедляется работа скрипта.

Хостер начал на меня наезжать, что я сильно гружу их проц. Посещаемость сайта около 500 хостов. Вообщем занялся я оптимизацией своих скриптов. Все построено на PHP + MySQL (магазин цифровых товаров).
Так вот, дома (Пень 2.4, 512 РАМ, Win XP + Denwer) добился уменьшение время выполнения скрипта в 2 раза, т.е. было около 0.080 сек, сейчас 0.043.
Закачал на сервер, да не тут то было. Время выполнения около 0.570 сек. Причем например сегодня с утра доходило до 5 сек!!!
Закачал на бесплатный хостинг с поддержкой MySQL и PHP, Там все нормально. Время выполнения около 0.020 сек.
Начал разбираться. Думал Мускул виноват, да нет! Оказалось ECHO!
В цикле у меня выводиться около 10 строк таблицы:
PHP:
	echo '<tr bgcolor='.$clr.'>';
	echo '<td><p><a href=buy.php?tovid='.$row_good[id].' class=cap2>'.$row_good[tov_name].'</a></p></td>';
	echo '<td><p><a href=seller.php?name=' . $row_good[user_holder] . ' class=cap2>' . $row_user[org_name] . '</a>&nbsp;'.$skidka_img.'</p></td>';
	echo '<td><p align=left>'.$esumm.'$</p></td>';
	echo '<td><p align=right><a href=buy.php?tovid='.$row_good[id].' class=cap2><img border=0 src=pic_buy.gif alt=Купить!></a></td>';
	echo '</tr>';
Так вот, когда отключаю ECHO вообще, то время 0.003 сек. Пробовал сначала все закидывать в переменную, а потом выводить. Не помогает. Менял на print, тоже самое.
Затем стал попеременно отключать то одну echo, то вторую. Обнаружил, что если в echo содержиться малое кол-во кода, то время генерации нормальное.
Попробовал после echo, вставил flush() то же непомогает.
Мне так кажется, что это связано с буфером вывода функции echo.
Вот кстати phpInfo моего хостера: knigman.net/phpinfo.php
Что делать то?
 

Мутник

Новичок
кстати, такое выглядит правильнее и работает немного быстрее. Но не думаю, что дело в этом:

PHP:
$row_good["user_holder"]; (с кавычками)
 

SelenIT

IT-лунатик :)
Можно (и ИМХО желательно) писать так:
PHP:
// начало цикла
?>
<tr bgcolor="<?=$clr?>">
	<td><p><a href="buy.php?tovid=<?=$row_good['id']?>" class="cap2"><?=$row_good['tov_name']?></a></p></td>
	<td><p><a href="seller.php?name=<?=$row_good['user_holder']?>" class="сap2"><?=$row_user['org_name']?></a>&nbsp;<?=$skidka_img?></p></td>
	<td><p align="left"><?=$esumm?>$</p></td>
	<td><p align="right"><a href="buy.php?tovid=<?=$row_good['id']?>" class="cap2"><img border="0" src="pic_buy.gif" alt="Купить!"></a></td>
</tr>
<?
// конец цикла
В этом и есть выгодное отличие PHP от Perl'а
 

tolik777

Новичок
SelenIT
Так тоже пробовал не помогает.

Вообщем нашел я решение:
ob_start("ob_gzhandler",9);
 

SelenIT

IT-лунатик :)
tolik777
Т.е. навешивание дополнительного обработчика при выводе из буфера уменьшает нагрузку проца?
 

DiTHER

bang bang
если уж gzhandler - то не 9ю же степень сжатия! За такое хостер тебя как раз пинать должен :) Рост поедания ресурсов CPU неприемлем, если сравнивать с коэффициентом сжатия. Рекомендуется от 1 до 6.

А вообще если с gzip-сжатием все путём, то возможно тормозит все это дело апач, т.к. при gzip-сжатии, скажем переконвертить чарсет он уже не может.
 
Сверху