|
Bannerbank за 24 часа Nikita Kislitsin Xakep, номер #053, стр. 053-088-2 Замер времени выполнения программы я осуществляю при помощи следующей функции: <? function mt(){ $ti=explode(" ",microtime()); return ($ti[0] + $ti[1]); } ?> Поясню. Функция microtime() возвращает строку, состоящую из двух чисел, разделенных пробелом. Последнее показывает количество секунд, прошедших с начала "эпохи", первое, соответственно, указывает на дробную часть этой величины. Разрезая по пробелу эту строку в массив и складывая величины, получаем действительное число, которое растет параллельно прошедшему времени. Соответственно, вычисляя этот параметр до и после некоторого блока, получаем время, за которое интерпретатор его обработал. Тестирование производилось на сервере 2xPIII 533MHz, 768Mb ECC RAM, 2x45Gb ATA100 HDD под FreeBSD 4.7 с Apache 1.3.27 и PHP 4.3. Но довольно слов, перейдем к практическим советам по организации php-сценариев наиболее эффективным образом. К слову, ты наверняка заметил, что в пхп множество функций имеют названия-синонимы. Как я выяснил, это не совсем алиасы. Функции работают по принципиально различным алгоритмам, т.е. какая-то в определенных условиях быстрее, какая-то медленнее. Кроме того, как оказалось, запись синтаксических выражений также может оказывать существенное влияние на эффективность сценария. Все эти секреты ниже :). Top secret Надо сказать, что все нижеприведенные данные являются плодами моих экспериментов. Это фактический материал, спорить с которым бесполезно :). Я не претендую на какую-то объективность, т.к. условия тестирования были далеки от лабораторных, но тот, кто скажет, что ускорение работы сценария на 40% - мелочь, и можно списать это на погрешность измерений, пусть первый бросит в меня камень :). Итак, поехали. 1) Меньше символов в имени переменной - быстрее сценарий. Экономим 10%! Простой тест - цикл с тысячью итераций, дописывающий к переменной строчку из 9 символов: Имя переменной Время работы % $x 0.00382800 88.35% $xxxxxxxxx 0.00384901 88.83% $30 раз x 0.00433300 100% Несложно заметить экономию - время выполнения алгоритма нелинейно возрастает с ростом длины имен используемых переменных. Очевидно, экономия будет намного больше, если взять пример программы, где переменных, скажем, 10, и выполняются более сложные операции. Однако и с укорачиванием имен не стоит особо усердствовать - переменные типа $a23 сильно снижают удобочитаемость кода :). 2) Вынос строковых переменных из кавычек - экономия до 40%! Как оказалось, php медленно обрабатывает переменные, расположенные внутри кавычек. Такая вроде бы мелочь может сэкономить до 40% процессорного времени! Тест был следующий: в цикле с одной тысячью итераций к строке $b приклеивается строка $a, после чего цикл повторяется. Результаты налицо: Конструкция Время работы % $a.$b 0.11631400 60.39% "$a"."$b" 0.19261100 100% 3) Использование perl-ориентированных регулярных выражений - ускорение в несколько раз. Регулярные выражения в php существуют как в виде самостоятельных функций, так и в виде процедур, частично заимствованных у perl. Результаты тестирования показали, что последние на большинстве строк работают во много раз быстрее! Тест заключался в замене символа "!" на "*" в 3-килобайтном тексте. Результаты: |