logo как заработать деньги: СЕО и оптимизация

Оптимизация РНР: строки.

Недавно беседовал со знакомыми програмерами об оптимизации PHP. В ответ мне подкинули ссылочку, с пояснением что tony2001 является одним из разработчиков РНР. Забавно, что базовые функции РНР являются столь не продуманными и разработчики не желают обращать на это внимание.

Однако ради справедливости я решил провести ряд тестов, результаты которых немедленно ввергли меня в шок. Итак, дано: линукс, PHP/4.3.11, функцию бенчмарк которая измеряет скорость выполнения кода, и функцию внутри класса которая запускается 1 миллион раз (это конечно не самая наджная, но весьма показательная методика тестирования скриптов).

Задача: найти самый быстрый способ определения переменной которая будет состоять из других переменных.

<?
$a='a';
$s=implode('',array($a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," !!!"));
?>

Скорость работы PHP скрипта 18.0985 секунды.

Следующий по тормознутости вариант:

<?
ob_start();
echo $a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." !!!";
$s=ob_get_contents();
ob_end_clean();
?>

Скорость работы PHP скрипта 12.93 секунды.

Далее идет стандарт:

<?
$s=$a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." !!!";
?>

Скорость работы PHP скрипта 9.73 секунды.

Следующий по тормознутости вариант:

<?
ob_start();
echo $a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," !!!";
$s=ob_get_contents();
ob_end_clean();
?>

Скорость работы PHP скрипта 9.12 секунды.

Столь любимый РНР програмерами способ включения переменных непосредственно в строку оказался самым быстрым.

<?
$s="$a $a $a $a $a $a $a $a $a $a !!!";
?>

8.88 секунды на цикл из 1 миллиона повторений.

Далее я изменил значение $a на строку длинной в 1099 байта, повторил тесты и получил абсолютно иную картину.

<?
ob_start();
echo $a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." !!!";
$s=ob_get_contents();
ob_end_clean();
?>

Скорость работы PHP скрипта 154.03 секунды.

<?
$s=$a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." ".$a." !!!";
?>

Скорость работы PHP скрипта 108.77 секунды.

<?
$s=implode('',array($a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," !!!"));
?>

Скорость работы PHP скрипта 57.11 секунды.

<?
ob_start();
echo $a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," ",$a," !!!";
$s=ob_get_contents();
ob_end_clean();
?>

Скорость работы PHP скрипта PHP скрипта 41.30 секунды.

<?
$s="$a $a $a $a $a $a $a $a $a $a !!!";
?>

Скорость работы PHP скрипта 23.53 секунды.

Выводы:

  • 1.Забудьте статьи об оптимизации PHP скриптов которые основывались на информации полученной до выхода PHP/4.3 (если среди советов было что-то: про использование одинарных кавычек вместо двойных, убирание коментариев из кода - скорее всего статья писалась очень давно и мало связана с реальностью).
  • 2.Конкатенация (то что делается с помощью точки) в РНР 4.х (а возможно также в 5й и 6й версии) реализована отвратительно. Скорее всего это связанно с тем что РНР при каждой операции слияния создает временную переменную и на это уходит излишне большое количество ресурсов.
  • 3.По возможности используйте включение переменных в строку заключенную в двойные кавычки, или используйте возможности echo со множеством агрументов.

P.S. Буду благодарен если кто нибудь повторит тесты на пятой версии РНР и опубликует здесь результаты. Сам пока на 5ю версию переходить не рискую.., имхо еще сыровата.., жду 5.3 photo Оптимизация РНР: строки.

bog: архив

15 comments for “Оптимизация РНР: строки.”

Оптимизация РНР: переменные и строки. //#
tony2001 редкостный дятел оказался, закрыл топик про пост запросыsmile //:
tony2001 редкостный дятел оказался многие оттуда болеют манией величия. БоГ, так ты давай готовый кит для тестенья, я прогоню photo samlowry //samlowry
Вначале надо функции движка слегка переписать, ибо на данный момент весь HTMLPHP код просто выкидывается. Скрипт переделать - дел на 5 секунд, но ведь надо при этом придумать куда добавить кнопку позволяющую постить код.., - а это уже гораздо сложнее smile. з.ы. Кстати, кто нить встречал рускоязычных веб дизайнеров - специалистов по юзабилити? У меня в свое время создалось впечатление что в русском языке эти два понятия не совместимы. smile //bog
Еще один любопытный линк на тему сравнения различных способов осуществления базовых функций в PHP скриптах: http://www.php.lt/benchmark/phpbench.php //bog
Кто протестит в РНР5 и РНР6 - пожалуйста отпишитесь о результатах.photo //bog
Return page thanking the user following successful submission of feedback to the FirstGov site. //:Stas
bog, по каким книгам ты php изучал? //:testino
Мануал по РНР на сайте php.net, причем самое интересное там - комментарии. Там обычно много примеров и описаний типичных проблем по каждой функции. Книги скажу честно - не читал вообще. Я сторонник практического обучения. Т.е. вначале ставишь перед собой элементраную задачу (типа хело ворд), находишь способ выполнения, проверяешь работоспособность, если все хорошо - усложняешь задачу. Если заглянуть на вики http://www.seriousrevenue.com/wiki/php/ , там есть список основных ресурсов по РНР (правда англоязычных). //bog
а сколько времени потребуется чтобы выполнить: <? $s='{$a} {$a} {$a} {$a} {$a} {$a} {$a} {$a} {$a} {$a} !!!'; ?> при прочих равных условиях? неплохо было бы эти значения отразить в статье...
//:ct
сорри ошибся в коде (двойные кавычки вместо одинарных): <? $s="{$a} {$a} {$a} {$a} {$a} {$a} {$a} {$a} {$a} {$a} !!!"; ?>
//:ct
<? $s='{$a} {$a} {$a} {$a} {$a} {$a} {$a} {$a} {$a} {$a} !!!'; ?> работает чуть медленее чем вариант когда фигурные скобки не используются.
//bog
В РНР5 все то же самое. Так что самое быстрое это использование двойных кавычек или команда implode() //bog
А если всетаки попробовать цикл For заюзать для этого? :) //:Alex
For - это дополнительные проверки и лишние команды. Но если лень писать код - можно и цикл поюзать. //bog
Что скажешь о Оптимизация РНР: строки.?
  Ваше имя
Сейчас популярно:
78 оптимизаторов изучают блог СЕО БоГа про оптимизацию. 83 читают ленту новостей поисковой оптимизации и маркетинга aka SEO & SMM. 40 используют уникальные SMM + SEO скрипты и сервисы для заработка денег.
Подписаться на обновления:
Все новости: оптимизаторы зарабатывают деньги

Получать обновления на email:

Доставляет FeedBurner