28.19. Не пользуйтесь регулярными выражениями без крайней надобности
PHP имеет большую библиотеку строковых функций, и некоторые из них чрезвычайно мощные. Однако в большинстве случаев для выполнения одной и той же задачи можно использовать несколько различных функций, но с разной эффективностью.
Вероятно, в числе наиболее часто используемых функций можно назвать reg_replace и preg_replace. Эти функции, предназначенные для замены строк в соответствии с шаблонами с использованием регулярных выражений, часто используются, когда шаблон замены является статическим выражением и нет необходимости в компиляции большого регулярного выражения. Например, выражение
$str = ereg_replace("sheep", "lamb", "Mary had a little sheep");
может работать в десять раз медленнее, чем эквивалентное ему выражение
$str = str_replace("Mary had a little sheep", "sheep", "lamb");
Пользуйтесь регулярными выражениями только в случае крайней необходимости!
Если необходимо использовать регулярное выражение, попробуйте воспользоваться функциями, совместимыми с Perl, такими как preg_match или preg_replace, вместо более старых функций для работы с регулярными выражениями, такими как ereg и ereg_replace. Кроме того, что они являются более мощными, функции, совместимые с Perl, обычно работают быстрее, чем старые регулярные выражения POSIX. 
28.20. Оптимизация циклов
Достаточно распространенной ошибкой, снижающей эффективность PHP, является создание циклов, просматривающих массивы без кэширования номеров элементов в массиве. Например, в листинге 28.12 первый цикл можно оптимизировать с тем, чтобы он заработал на 50% быстрее при кэшировании значения count($arr) в переменной вместо того, чтобы раз за разом вызывать count. Кроме того, можно получить счетчик внутри шага инициализации цикла for. По возможности следует вывести статический код, который является инвариантным по отношению к счетчику цикла, из цикла.

Листинг 28.12. Подсчет элементов массива за один раз

<?php
// начальные значения массива
$arr = array("Cosmo", "Elaine", "George", "Jerry"); // просмотр элементов с их пересчетом for ($i=0; $i < count($arr);
{
print $arr[$i];
}
//проход по элементам с предварительным наращиванием счетчика $n = count($arr); for ($i=0; $i < $n;
{
print $arr[$i];
}
// поместить счетчик в шаг инициализации for ($i=0, $n = count($arr); $i < $n;
{
print $arr[$i];
}

28.21. Настройка Web-сервера IIS
Если ваш чувствительный к быстродействию PHP-сервер размещен на Web-сервере Microsoft IIS под управлением Windows, вам следует знать о различных настройках, которые позволяет делать IIS. Различные настройки позволяют находить нужный баланс между надежностью и безопасностью с выигрышем в быстродействии.
В окне свойств приложения PHP в Internet Services Manager выберите закладку Home Directory. В этой закладке есть раскрывающееся меню Application Protection, с помощью которого задается уровень изоляции приложения. По умолчанию устанавливается значение Medium, которое означает, что PHP-страницы будут отдельным процессом Web-сервера IIS. На практике это означает, что если происходит аварийный отказ PHP из-за разрушения данных в памяти или из-за переполнения стека, это влияет только на процесс IIS, с которым работает только PHP. На другие приложения, которые обслуживаются другими процессами, это никак не влияет. 
Делая работу сервера более надежной, эти установки делаются за счет быстродействия. Другой возможной настройкой меню Application Protection является установка Low, которая приводит к работе PHP в главном процессе IIS inetinfo.exe. Запросы не будут передаваться внешним процессам, что дает существенный рост быстродействия. Однако это может поставить под угрозу стабильность - любая аварийная остановка PHP приведет к аварийной остановке всего Web-сервера. К сожалению, из-за того что не все модули PHP и используемые ими библиотеки полностью не зависят от взаимовлияния потоков, таких аварийных остановок избежать невозможно.
Для Web-узлов, чувствительных к быстродействию, можно порекомендовать вос­пользоваться сначала PHP с настройкой меню Application Protection Low. Только при наличии определенных затруднений необходимо перейти на установку Medium.