- •Оглавление
- •Начало
- •Использование стабильной версии (5.5)
- •Встроенный веб-сервер
- •Установка на Mac
- •Установка в Windows
- •Vagrant
- •Стандарты написания кода
- •Основные моменты языка
- •Парадигмы программирования
- •Пространства имен
- •Стандартная Библиотека PHP (SPL)
- •Интерфейс командной строки
- •XDebug
- •Менеджер зависимостей
- •Composer и Packagist
- •PEAR
- •Практики написания кода
- •Основы
- •Дата и время
- •Design Patterns
- •Исключения
- •Уровни абстракции
- •Безопасность
- •Безопасность веб-приложений
- •Хэширование паролей
- •Фильтрация данных
- •Конфигурационные файлы
- •Использование глобальных переменных
- •Сообщения об ошибках
- •Тестирование
- •Тесто-ориентированная разработка
- •Поведенческо-ориентированная разработка
- •Дополнительные инструменты тестирования
- •Сервера и развертывание
- •Платформа, как сервис (PaaS)
- •Виртуальный или выделенный сервер
- •Виртуальный хостинг
- •Кэширование
- •Кэширование байткода
- •Кэширование объектов
- •Ресурсы
- •Из источника
- •Их следует читать в твиттере
- •Наставничество
- •PHP PaaS поставщики
- •Фреймворки
- •Компоненты
- •Сообщество
- •Пользовательские группы PHP
- •Конференции PHP
- •Советы по повышению эффективности PHP
- •Профилируйте ваш код для обнаружения узких мест
- •Обновите ваш PHP
- •Кэширование
- •Использование буферизации вывода
- •Не копируйте переменные без причины
- •Избегайте SQL запросов в цикле
- •Дополнительные руководства
- •Основы
- •Операторы сравнения
- •Условные операторы
- •Глобальное пространство имён
- •Строки
- •Тернарный оператор
- •Объявление переменных
- •Функциональное программирование в PHP
- •Шаблоны проектирования
- •Фабрика (англ. Factory)
- •Одиночка (англ. Singleton)
- •Фронт-контролер (англ. Front Controller)
- •Модель-представление-контроллер (англ. Model-View-Controller)
Советы по повышению эффективности PHP
Author: Eric Higgins, Google Webmaster
Recommended experience: Beginner to intermediate PHP knowledge
PHP - очень популярный язык программирования, используемый на многих веб сайтах. В этой статье, мы надеемся помочь вам улучшить производительность ваших PHP скриптов с изменениями, которые вы можете внести очень быстро и безболезненно. Учтите, что производительность может сильно меняться в зависимости от версии PHP на вашем веб сервере и в целом от вашего кода.
Профилируйте ваш код для обнаружения узких мест
Изречение Хора гласит, что преждевременная оптимизация - это корень всех зол, важно это учитывать, делая ваши веб сайты быстрее. Перед изменением вашего кода, вам нужно определить, что приводит к замедлению. Вы можете прочитать это руководство, а так-же многие другие по теме оптимизации PHP, в то время, как ваши проблемы могут зависить от базы данных или сети. [Профилируя ваш PHP код][http://www.google.com/webhp?#q=profiling+php],
вы можете попробывать определить узкие места.
Обновите ваш PHP
Команда разработчиков, которая поддерживает ядро PHP, внесло большое число важных исправлений производительности за последние несколько лет. Если на ваш веб сервер всё ещё работает со старыми версиями, как PHP 3 или PHP 4, то прежде всего вам нужно подумать об обновлении PHP, прежде чем вы попытаетесь оптимизировать ваш код.
•Миграция от PHP 4 до PHP 5.0.x¹
•Миграция от PHP 5.0.x до PHP 5.1.x¹
•Миграция от PHP 5.1.x до PHP 5.2.x¹
¹http://www.php.net/manual/migration5.php ¹http://www.php.net/manual/migration51.php ¹http://www.php.net/manual/migration52.php
Советы по повышению эффективности PHP |
42 |
Кэширование
Использование модули кэширования, таких как Memcache, или шаблонизаторов, которые поддерживают кэширование, таких как Smarty, может улучшить производительность ваших веб сайтов с помощью кэширования результатов запросов к базам данных или отрендеренных страниц.
Использование буферизации вывода
PHP использует буффер памяти, чтобы сохранить все данные, которые ваш скрипт пытается вывести. Этот буффер может сделать ваши страницы визуально медленными, поскольку вашим пользователям придётся ждать пока буффер заполнится перед тем, как он отправит какие-либо данные. К счастью, вы можете сделать некоторые изменения, которые заставят PHP вернуть выводной буффер раньше, а так-же чаще, что сделает ваш сайт быстрее для ваших пользователей.
• Контроль выводного буффера¹
|
Избегайте написания наивных геттеров и |
|
сеттеров |
|
Когда вы пишите классы в PHP, вы можете сохранить время и повысить скорость ваших |
|
скриптов, работая со свойствами объекта напрямую, вместо написания наивных сеттеров и |
|
геттеров. В следующем примере, класс dog использует методы setName() и getName() для |
|
доступа к свойству name. |
1 |
<?php |
2 |
|
3 |
class dog { |
4 |
public $name = ''; |
5 |
|
6 |
public function setName($name) { |
7$this->name = $name;
8 |
} |
9 |
|
10public function getName() {
11return $this->name;
12}
13}
¹ http://www.php.net/manual/book.outcontrol.php
|
Советы по повышению эффективности PHP |
43 |
|
Имейте в виду, что setName() и getName() не делают большего, чем сохраняют и возвращают |
|
|
свойство name, соответственно. |
|
1 |
<?php |
|
2 |
|
|
3$rover = new dog();
4 |
$rover->setName('rover'); |
5 |
echo $rover->getName(); |
|
Установка и вызов свойства name напрямую может позволить скрипту работать до 100% |
|
быстрее, так-же, как и сократить время разработки. |
1 |
<?php |
2 |
|
3$rover = new dog();
4 $rover->name = 'rover';
5echo $rover->name;
|
Не копируйте переменные без причины |
|
Иногда новички в PHP пытаются сделать их код “чище”, копируя предустановленные |
|
переменные в переменные с более короткими именами, перед работой с ними. Это при- |
|
водит к увеличенному потреблению памяти(когда переменные переназначаются), а так-же |
|
к замедлению скриптов. В следующем примере, что происходит если пользователь вставил |
|
512KB символов в поле textarea. Это исполнение приведет к потреблению примерно 1MB |
|
памяти. |
1 |
<?php |
2 |
|
3 |
$description = strip_tags($_POST['description']); |
4echo $description;
Нет причины копировать переменную в примере выше. Вы можете просто сделать эту операцию одной линией и избежать сверх-потребление памяти:
1 |
<?php |
2 |
|
3 |
echo strip_tags($_POST['description']); |
Советы по повышению эффективности PHP |
44 |
|
Избегайте SQL запросов в цикле |
|
Частая ошибка - размещение SQL запросов в цикле. Это приводит к нескольким циклам |
|
запросов к базе данных, и существенно замедляет скрипты. В примере ниже, вы можете |
|
изменить цикл, чтобы он строил одиночный SQL запрос и вставлял всех пользователей за |
|
один раз. |
1 |
<?php |
2 |
|
3foreach ($userList as $user) {
4 $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_nam\
5e'] . '", "' . $user['last_name'] . '")';
6 mysql_query($query);
7}
Выполняет запрос:
1INSERT INTO users (first_name,last_name) VALUES("John", "Doe")
|
Вместо использования цикла, вы можете скомбинировать данные в одиночный запрос к базе. |
1 |
<?php |
2 |
|
3$userData = array();
4foreach ($userList as $user) {
5$userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
6}
7$query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userDa\
8ta);
9mysql_query($query);
Выполняет запрос:
1INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")...
Синтаксис MySQL INSERT¹
Дополнительные руководства
PHP Memcache модуль¹ Шаблонизатор Smarty¹ ¹
¹ http://dev.mysql.com/doc/mysql/ru/insert.html ¹ http://www.php.net/memcache ¹ ¹http://www.smarty.net/