Fast Site Engine
Высокопроизводительный движок для сайтов
Заказать сайт на основе движка
О движкеПроизводительностьБезопасностьТехнические требованияSEO 
Лицензионное соглашение
Демо
Установка
Панель управления
Модули
Документация
Шаблоны
Тесты производительности php
Планы на будущее
Список изменений
Отзывы и пожелания
Переходим на Линукс
Всякое разное
Тесты производительности php

Тесты производительности php

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

Тесты php буду проводить на 2 машинах

Конфигурация рабочего компьютера:
  Apache/2.4.12 php 5.6.8
  Linux version 3.13.0-24-generic (Ubuntu 4.8.2-19 x86_64)
  8 ядер AMD FX-8350 Black Edition @ 4.60GHz (Cool'n'Quiet: 1.40GHz)
Конфигурация сервера:
  Apache/2.2.27 PHP 5.5.14
  Linux version 2.6.32-042stab105.14 (Red Hat 4.4.6-4) (CENTOS 6.6 x86_64)
  4 ядра Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz

Тестирование php осуществляю следующим образом

define('LOOP',1000000);
function t($t=0){
  $a=explode(' ',microtime());
  $e=$a[1]+$a[0];
  return (0==$t)?$e:$e-$t;
}
function f1(){
  $i=0;
  while($i<LOOP){
    //test
    ++$i;
  }
}
function f2(){
  $i=0;
  while($i<LOOP){
    //test
    ++$i;
  }
}
//измерение времени, чтоб не тратить время на создание в процессе..
$t[1]=$t[2]=$t[3]=$t[4]=$t[5]=$t[6]=$t[7]=$t[8]=$t[9]=t();//1-й функции
$f[1]=$f[2]=$f[3]=$f[4]=$f[5]=$f[6]=$f[7]=$f[8]=$f[9]=t();//2-й функции
//далее меняя порядок запускаю тесты
$t[1]=t();f1();$t[1]=t($t[1]);
$f[1]=t();f2();$f[1]=t($f[1]);
$f[2]=t();f2();$f[2]=t($f[2]);
$t[2]=t();f1();$t[2]=t($t[2]);
...
//Вывод информации имеет свой оверхед поэтому echo вынесено в конец

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

Результаты заносятся в таблицы.

Первый PHP тест естественно $i++ vs ++$i

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

function f1(){
  $i=0;
  $k=0;
  while($i<LOOP){
    ++$k;++$k;++$k;++$k;++$k;++$k;++$k;++$k;++$k;++$k;++$k;++$k;++$k;++$k;
    ++$i;
  }
}
function f2(){
  $i=0;
  $k=0;
  while($i<LOOP){
    $k++;$k++;$k++;$k++;$k++;$k++;$k++;$k++;$k++;$k++;$k++;$k++;$k++;$k++;
    ++$i;
  }
}
Компьютер:
вызововвpемя f1()вpемя f2()выигралбыстрее на
1100 0000.0137220.014492f1()0.000770 с.5.31 %
2100 0000.0100780.014650f1()0.004572 с.31.21 %
3100 0000.0101010.014486f1()0.004385 с.30.27 %
4100 0000.0100280.014546f1()0.004518 с.31.06 %
5100 0000.0101600.014507f1()0.004347 с.29.97 %
6100 0000.0100670.014617f1()0.004550 с.31.13 %
7100 0000.0100850.014780f1()0.004695 с.31.77 %
8100 0000.0101360.014482f1()0.004346 с.30.01 %
9100 0000.0100640.014584f1()0.004520 с.30.99 %
Всего: 900 0000.0944410.131144f1()0.036703 с.27.99 %
Сервер:
вызововвpемя f1()вpемя f2()выигралбыстрее на
1100 0000.0709020.080058f1()0.009156 с.11.44 %
2100 0000.0542380.057771f1()0.003533 с.6.12 %
3100 0000.0598970.065339f1()0.005442 с.8.33 %
4100 0000.0477920.051816f1()0.004024 с.7.77 %
5100 0000.0487110.040605f2()0.008106 с.16.64 %
6100 0000.0398670.038331f2()0.001536 с.3.85 %
7100 0000.0374250.037627f1()0.000202 с.0.54 %
8100 0000.0376960.038230f1()0.000534 с.1.4 %
9100 0000.0380090.037861f2()0.000148 с.0.39 %
Всего: 900 0000.4345370.447638f1()0.013102 с.2.93 %
Наблюдения и выводы:

Результаты гуляют, причём при повышении количества до миллионов нивелируется (++$i быстрее на ~4%). В целом действительно можно сказать что ++i быстрее i++.

Страница сгенерирована за 0.004357 секунды
На один процесс веб-сервера: 230 стр/сек.
Всего Apache может отдать: 58 880 стр/сек.
Выделено php памяти: 855.63 KB, real_usage: 2 MB

© Все права защищены 2004 - 2018
Карта сайта
Отслеживать изменения в Твиттере
Политика конфиденциальности

Браузер построил за сек.
Полное время сек.

С момента выгрузки предыдущей страницы из памяти браузера: сек.