АСѾԐД Создание и продвижение сайтов

Fast Site Engine

CMS для сайтов

Создать сайт

Карта сайта
Переходим на Линукс
Политика конфиденциальности
Сделать сайт на основе Fast Site Engine

Установка
Документация
Список изменений
Лицензионное соглашение

Скачать
О движкеОбо мнеДеятельностьПортфолиоКонтакты

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

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

Тесты PHP проводились на двух конфигурациях

Компьютер:
  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',100000);
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;
  }
}
Компьютер:
вызововвремя f1()время 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 %
Сервер:
вызововвремя f1()время 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++.





09.07.2026
09.8.7534 от С.М.З.Х.
Unix time: 1783619324
© Все права защищены 2004 - 2026