Оптимизация php-скриптов PDF Печать E-mail

Отличие PHP от других языков программирования, например, C++, Pascal и т.д. заключается в том, что исходный код программы на php при каждом обращении к скрипту интерпретируется по-новой. Поэтому важно научиться правильно (оптимально) составлять код программ.

Рассмотрим несколько ошибок и способы их устранения.

Тестируем код:

$a=array();  
for ($i=1;$i<99999;$i++){array_push($a,"1");}  
[start]  
$counter_my=sizeof($a);  
for ($index=1;$index<$counter_my;$index++){    
$a[$index]="1";  
}                      
[0.491915]  
[finish]  

Во втором примере заменим переменные $counter_my и $index соответственно на $co и $i.

В третьем примере не будем использовать переменную $co, а напишем count($a) прямо в цикле вместо $co.

В четвертом примере заменим count на sizeof.

Итог, самая быстрая комбинация из четырех - это вторая:
1=[0.491915] 2=[0.458970] 3=[0.649125] 4=[0.634952] (Измеряем участок кода между start и finish)

$co_my=sizeof($a);  
for ($i=1;$i<$co;$i++){    
$a[$i]="1";  
}                      
[0.458970]  
Выводы (на основе этих экспериментов и личного опыта):
  • используем короткие имена переменных (не более 4 символов)
  • используем sizeof() вместо count()
  • выносим определение размера массива за пределы цикла
  • не создаем лишних переменных. Вместо $x=1; $y=2; $z=x+y; пишем $z=1+2
  • вместо echo " Итого: $cnt"; используем echo ' Итого: '.$cnt;

Приспособиться под вышеприведенные ограничения совсем не сложно, зато ускорение будет огромным! Оптимизация позволит ускорить работу php-скриптов более чем в 2 раза!

команда include();

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

Вот некоторые статистические данные:

    php-скрипт до оптимизации:
    - количество строк кода 2000
    - время выполнения php-скрипта: 0.005 с

    php-скрипт после оптимизации (разбиения на части):
    - количество строк кода - увеличилось на 20
    - время выполнения оптимизированного php-скрипта: 0.0008с

Чем сложнее структура скрипта, чем больше в ней условных операторов и циклов, тем медленнее скрипт работает. При помощи условного оператора происходит обход большой части кода. Время на переход по коду до выхода из условного оператора намного больше времени перехода по одному оператору include().

Механизм разбиения скриптов на составные части, применяется в футбольном тотализаторе. Алгоритмы, используемые в нем, достаточно трудоемки и громоздки. Благодаря оптимизации и разбиению на подгружаемые при необходимости 6 частей удалось значительно ускорить вывод страниц.

Поговорим о глобальных переменных и функции сжатия буфера.

Проведя ряд экспериментов, можно получить интересный результат: если в функцию передавать глобальные переменные в виде параметров функции, а не через директиву global, то работа локального участка кода php-скрипта увеличивается в 2 раза.

Пример замедленного участка кода php-скрипта:

function f1(){ global $x; return $x*$x; }

Пример оптимизированного участка кода php-скрипта:

function f1($x){   return $x*$x;  }  

Чем меньше трафик от сервера к клиенту, чем быстрее загружаются страницы. Следующий эксперимент позволил ускорить работу php-скриптов в 4 - 20 раз! Действительно, впечатляющие показатели. Чтобы добиться такого ускорения, нужно использовать всего два оператора PHP:

    @ob_start("ob_gzhandler"); - в самом начале скрипта.
    @ob_end_flush(); - в завершении скрипта.

Первая команда создает объект, в который перенаправляется вся информация после работы php-скрипта. Вторая команда отправляет содержимое буфера клиентскому приложению (браузеру) и удаляет буфер.

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

Автор Шаров Евгений

По материалам сайта: http://www.gcmsite.ru