powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Тест стоимости вызовов в php7.3-fpm
5 сообщений из 5, страница 1 из 1
Тест стоимости вызовов в php7.3-fpm
    #40007815
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Провел тестирование стоимости вызовов функций на PHP7.3-fpm, итого результаты теста:

avg time: clear=26,16 ns, func=69,83 ns, stat=83,53 ns, method=90,29 ns.
static/func=31,4%
method/func=46,9%

Железо: Pentium Core2duo E2200, выключено все по максимуму, кроме браузера с 1 вкладкой :)

Тест - простая функция ( return $i+10; ) возвращающая параметр + константа, результат которой присваивается в переменную в цикле из 100_000 повторов. Функция реализована трижды: как глобал, как статическая функция класса и как метод объекта.
4 цикла (один "пустой", без вызова но с вычислением) завернуты в 100 повторов для вычисления средних значений.

Сам тест:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
<?php
// Проверка скорости исполнения вызовов статических, методов и простых функций для php7.3-fpm:

/** simple function */
function someTest(int $i): int
{
    return $i+10;
}

class Some {
    public static function statTest(int $i): int
    {
        return $i+10;
    }

    public function dynTest(int $i): int
    {
        return $i+10;
    }
}

$objSome = new Some();
$i = 0;
$res = 0;
$num = 100;
$repeat = 1000*1000;
$sum = [];

ob_start();
do {
    $start = microtime(true);
    for ($i = 0; $i < $repeat; $i++) {
        $res = $i+10;
    }
    $start = round((microtime(true) - $start)*1000, 3);
    echo $res;
    $sum['clear'][] = $start;

    $start = microtime(true);
    for ($i = 0; $i < $repeat; $i++) {
        $res = someTest($i);
    }
    $start = round((microtime(true) - $start)*1000, 3);
    echo $res;
    $sum['function'][] = $start;

    $start = microtime(true);
    for ($i = 0; $i < $repeat; $i++) {
        $res = Some::statTest($i);
    }
    $start = round((microtime(true) - $start)*1000, 3);
    echo $res;
    $sum['static'][] = $start;

    $start = microtime(true);
    for ($i = 0; $i < $repeat; $i++) {
        $res = $objSome->dynTest($i);
    }
    $start = round((microtime(true) - $start)*1000, 3);
    echo $res;
    $sum['method'][] = $start;
} while( --$num > 0 );
ob_clean();

$num = 100;
$clear = $func = $stat = $dyn = 0.0;
for($i=0; $i<$num; $i++){
    $clear += $sum['clear'][$i];
    $func  += $sum['function'][$i];
    $stat  += $sum['static'][$i];
    $dyn   += $sum['method'][$i];
}
// calc average time for 1 in nano seconds:
$multiplier = 1000*1000/$num/$repeat;
$clear = round($clear*$multiplier, 2);
$func  = round($func*$multiplier, 2);
$stat  = round($stat*$multiplier, 2);
$dyn   = round($dyn*$multiplier, 2);

echo "\n<br><br>avg time: clear={$clear} ns, func={$func} ns, stat={$stat} ns, method={$dyn} ns."
  , "\n<br>static/func=", round(($stat-$clear)/($func-$clear)*100 - 100, 1), '%'
  , "\n<br>method/func=", round(($dyn-$clear)/($func-$clear)*100 - 100, 1), '%'
;



К вопросу, может ли хоть какой-то "фреймворк" (Zend, Yii, Laravel, Symphony, etc.) работать в HiLoad с ихними 60+ вложениями вызовов, DI, хелперами, сервисами и прочей ерундой. :)


Историки часто находят артефакты древней высокоразвитой Цивилизации со странными буквами - СССР
...
Рейтинг: 0 / 0
Тест стоимости вызовов в php7.3-fpm
    #40007823
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Тест стоимости вызовов в php7.3-fpm
    #40007826
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow,

И? Это тут к чему?

Что там с чем сравнивается: 717 реквестов на поток .. это же просто жуткие тормоза .. и, на каком железе?
2 метра на "Привет Мир" и 200+ классов, то что может выдать "школьник на HTML" .. крутой тест. :)

В общем, вопрос не рассмотрен как положено, тема не раскрыта. ;)
...
Рейтинг: 0 / 0
Тест стоимости вызовов в php7.3-fpm
    #40007828
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avg time: clear=26,25 ns, func=54,34 ns, stat=67,98 ns, method=75,69 ns.
static/func=48,6%
method/func=76%

Удалены описания параметров и возвращаемых значений .. расход "велик" однако.
...
Рейтинг: 0 / 0
Тест стоимости вызовов в php7.3-fpm
    #40007928
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow,

Тогда уж надо было приводить что-то такое: https://wpgutenberg.top/polnoe-sravnenie-proizvoditelnosti-php-5-6-7-0-7-1-7-2-7-3-i-7-4-2020/

400 реквестов в секунду на .. 30-процессрном Xeon со 128 гектарами оперативы и SSD дисками .. это Hiload, точно? Хаха.. :)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Тест стоимости вызовов в php7.3-fpm
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]