logo как заработать деньги: СЕО и оптимизация
Интересен bog или тема «Оптимизация РНР: методы.»? Читайте статьи: ; ; ;   Ваши письма......

Оптимизация РНР: методы.

Не секрет, PHP очень легкий и доступный язык програмирования. Поэтому количество людей именующих себя PHP программистами - огромно. Но если при этом начать изучать код программ или доступные статьи, то становиться понятно что уровень програмирования среди пхпшников довольно слаб. И не редки случаи когда свежекупленный скрипт приводит к падению сервера.

Я не раз говорил об оптимизации отдельных функций или команд в PHP, но настоящая оптимизация, которая необходима при разработке скриптов способных работать при большой нагрузке, начинается с разработки алгоритма работы приложения. Кроме того, есть несколько простых правил позволяющих ускорить как процесс создания (редактирования) кода, так и скорость работы приложений.

  • 1. Все переменные,индексы массивов, файлы используемые в скрипте должны быть определены, или скрипт должен проверять их наличие. Сравните два варианта: if(!$_SERVER[’PHP_AUTH_USER’]){exit;} и if(empty($_SERVER[’PHP_AUTH_USER’])){exit;} Какой вариант по вашему будет быстрее? Правильный ответ - второй. Потому что при использовании подобной конструкции в реальном приложении, в случае отсутствия переменной PHP_AUTH_USER РНР генериует предупреждение и расходует на это лишние ресурсы. Теоретически можно предположить что этого можно избежать используя оператор @ или команды error_reporting(0); ini_set(’display_errors’,’0’); однако на практике, несмотря на то что вывод сообщений об ошибках будет подавлен PHP все равно тратит ресурсы на обработку команд.
  • 2. Старайтесь свести количество переменных, массивов (и их индексов) а также их значения и время использования к минимуму. РНР в дефолтной конфигурации позволяет использовать до 3мб памяти, но некоторые разработчики считают что этого слишком мало и ставят ini_set("memory_limit","50M"); или что-то в этом роде. Все это не критично если вы будете единственным пользователем. Но если существует вероятность что к вашему скрипту будут одновременно обращаться несколько пользователей, то следует задуматься о том, что количество свободной памяти непостоянно. И для приложений которые будут работать на большом трафике количество используемой памяти должно быть сведено к минимуму, в противном случае вы рискуете снизить быстродействие всей системы из за неправильного распределения ресурсов. Все это достаточно очевидно, но давайте возьмем пример:

/* some code */

$tabname=array(1,2,3,4,5,6,7,8,9);

$a=file(’log’); //допустим что тут файл из 1000 строк, по 10000байт каждая.

echo ’<table><tr>’;

foreach($tabname as $x)

{ echo "<td>$x</td>";

} echo ’</tr>’,$a[10],’</table>;

/* some code */

На первый взгляд данный код достаточно логичен. Однако в реальности может возникнуть следующая ситуация: output_buffering в дефолтной установке PHP выключен, а это значит что результаты работы скрипта сразу (или, в зависимости от настроек, по мере накопления минимальной длины) отправляются пользователю.

В случае если между сервером и пользователем маленькая скорость передачи данных РНР будет держать данные (приостановит выполнение) до момента окончания передачи кода. Таким образом если в теории ваш скрипт отрабатывает (и соответственно освободает память) за доли секунды, то на практике PHP будет использовать ресурсы до окончания передачи данных.

Чтобы этого избежать следует использовать ob_start() или определять переменные в последний момент и освобождать после использования. Таким образом вышеуказанный код можно переписать следующим образом:.

/* some code */

$tabname=array(1,2,3,4,5,6,7,8,9);

ob_start();

echo ’<table><tr>’;

foreach($tabname as $x)

{ echo "<td>$x</td>";

}

$a=file(’log’);

echo ’</tr>’,$a[10],’</table>;

unset($a);

ob_end_flush();

/* some code */

Однако также стоит заметить что не стоит зацикливаться на подобных моментах если вы работаете с переменными которые занимают небольшое количество памяти. В зависимости от структуры скрипта - необходимо использовать разные методы его оптимизации.

з.ы. Продолжение следует.

bog: архив

4 comments for “Оптимизация РНР: методы.”

Способы оптимизации приложений на РНР //#
Я б посоветовал главное: по максимуму - работать со статикой. Мой любимый пример - Movable Type, где база + скрипты юзаются только для генерации статических html-файлов. Это погасит многие неоптимальности скрипта. Для ряда случаев (вебсервисы, частообновляемые сайты, типа форумов), это конечно, не катит. //samlowry

На самом деле, при грамотном подходе это катит везде, просто под словом статика следует понимать не только HTML страницы, но и отдельные части страниц для получения которых требуется большое количество ресурсов.

Даже новостные сайты и крупные форумы обновляются далеко не каждую секунду, а если при этом количество пользователей между обновлениями дает нагрузку большую, чем модуль для генерации статики, - то следует подумать о кешировании и статике. Исключение - системы где каждыйответназапросотуникального пользователя должен быть польностью персонализирован и обработан индивидуально.

Но и тут можно использовать этот метод для отдачи статики неавторизованным пользователям (или к примеру поисковым ботам).

//bog
Google is the best search engine //:JaneUnderwood
Что скажешь о Оптимизация РНР: методы.?
  Ваше имя
Сейчас популярно:
69 оптимизаторов изучают блог СЕО БоГа про оптимизацию. 57 читают ленту новостей поисковой оптимизации и маркетинга aka SEO & SMM. 70 используют уникальные SMM + SEO скрипты и сервисы для заработка денег.
Подписаться на обновления:
Все новости: оптимизаторы зарабатывают деньги

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

Доставляет FeedBurner