Еще в ноябре 2005 года на встрече в Париже разработчики обсудили новые возможности следующей, шестой, версии PHP. Интересует ли Вас, какой будет эта версия? Примите участие в опросе, который проводится на сайте рассылки.
[опрос на английском языке: PHP 6: Are you interesting in? (PHP 6: Вы зантересованы?) - YES (ДА) - NO (НЕТ)]
PHP 5: Новые возможности.
Производительность
The Pterodactyl
Copyright 2006 Pterodactyl's School
Copyright 2006 Pterodactyl's School.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
16.06.2006
История переиздания
Издание 1.00
[ Дата ]
Первоначальная версия.
Аннотация
Создание высокопроизводительных приложений с помощью PHP 5.
Производительность приложения является одной из главных целей при его разработке, особенно, если на будущем сайте ожидается высокая посещаемость. Заботиться о производительности следует уже на этапе разработки приложения. Чему же следует уделить внимание?
Сессии
Сессионные переменные являются одним из основных видов информации, от запроса к запросу циркулирующей между броузером-клиентом и сервером. На стороне клиента обычно им соответствуют куки (cookies), а на стороне сервера в промежутках между запросами эти переменные обычно (по умолчанию) хранятся в локальном файле. Именно здесь и гнездится угроза производительности будущего приложения.
Действительно, представьте себе, что из-за постоянно возрастающей нагрузки пришлось распределить ее между двумя серверами; причем выбор сервера при каждом запросе производится случайно. Если сессионные данные хранятся на этих серверах локально, то существует опасность их рассогласования. В этом случае каждый следующий запрос (например, при обновлении страницы) будет работать с различными сессионными данными, что, безусловно, ни к чему хорошему не приведет.
Решениям проблемы может явиться вынос сессионных данных на внешний общий сервер (например, базы данных). Тогда все запросы, независимо от обрабатывающего их сервера, будут пользоваться одними и теми же сессионными данными. Теперь дальнейшее добавление новых серверов в случае возрастания нагрузки не вызовет больше никаких затруднений.
Кэширование
Существенному повышению производительности приложения может способствовать кэширование, т. е. сохранение промежуточных результатов работы приложения. Для этого можно использовать пакет PEAR::Cache (или Cache_Lite).
Запросы к базе данных. Для сохранения результатов запросов к базе данных и выбора оптимальной стратегии кэширования (определения наиболее затратных запросов) удобно использовать класс Cache_DB, входящий в состав пакета Cache.
Возвращаемые функциями значения. Как Cache, так и Cache_Lite позволяют сохранять результаты, возвращаемые функциями. Таким образом удается избежать необходимости многократно выполнять одну и ту же функцию с одинаковыми параметрами.
Компилированные шаблоны. Многие популярные системы шаблонов (Smarty, HTML_Template_Flexy) компилируют используемые шаблоны, готовя на их основе готовый PHP код. Тем самым предотвращается многократный разбор (parsing) одних и тех же шаблонов.
Буферизация вывода. Также могут быть сохранены (как HTML код) результаты работы целого скрипта или какой-то его части. Средства для этого содержат ранее упомянутые пакеты.
ООП
PHP 5 позволяет легко создавать объектно-ориентированные приложения. В то же время, многие расширения все еще предлагают процедурные решения (функции); следует помнить и о встроенных функциях PHP.
В данной ситуации следует соблюдать "золотую середину". С одной стороны, ООП позволяет создавать более читабельный код; с другой - излишнее увлечение им может сделать приложение чрезмерно сложным.
В частности, написание объектно-ориентированных оболочек к встроенным функциям имеет смысл только в том случае, если они действительно обеспечивают, например, унифицированный API или более высокий уровень абстрагирования (впрочем, каждое абстрагирование должно преследовать какую-то конкретную цель).
Следует помнить также, что, несмотря на значительное развитие объектной модели в PHP 5, она все же значительно уступает аналогичным моделям в таких языках, как C++ и Java (как по уровню, так и по быстродействию).
Литература
[1] PHP 5 Power Programming. AndiGutmans, StigBakken, and DerickRethans. Prentice Hall PTR. www.phptr.com. Copyright
2005 Pearson Education, Inc..