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.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Эффективность и отладка. Часть Шестнадцатая.
20-07-2015
<< Предыдущая статья | Следующая статья >> |
PHP. Эффективность и отладка. Часть Пятнадцатая. | PHP. Типовые проекты |