ТОП-10 популярных


НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...


Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

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

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...

Internet2, или cтарые песни о новом
Когда-то на заре Интернета, тогдаеще военно-научной сетиAPRAnet, были заложены основныепринципы функционирования«Сети сетей». В их числе — использованиепротокола, называемого сейчасIPv4. В...

PHP. Эффективность и отладка. Часть Шестнадцатая.


20-07-2015

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.

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
PHP. Эффективность и отладка. Часть Пятнадцатая. PHP. Типовые проекты