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

Fast Site Engine

CMS для сайтов

Создать сайт

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

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

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

php 7 строгая типизация

Наконец появилась в php 7 строгая типизация. Проведём тесты производительности и узнаем какой прирост можно получить если заставить компилятор меньше думать о типах.

function test1($x,$y){
  return $x+=$y;
}
function test2(int $x,int $y): int{
  return $x+=$y;
}
function f1(){
  $i=0;$x=0;while(++$i<LOOP)$x=test1($x,$i);
}
function f2(){
  $i=0;$x=0;while(++$i<LOOP)$x=test2($x,$i);
}

Результаты тестирования php7 строгая типизация и без

Компьютер: (php 7.1.4)
вызововвремя f1()время f2()победилбыстрее на
11 000 0000.0547040.074529f1()0.019825 с.26.6 %
21 000 0000.0544700.076018f1()0.021548 с.28.35 %
31 000 0000.0546310.074365f1()0.019734 с.26.54 %
41 000 0000.0546490.074449f1()0.019800 с.26.6 %
51 000 0000.0547580.074401f1()0.019643 с.26.4 %
61 000 0000.0545990.074487f1()0.019888 с.26.7 %
71 000 0000.0545100.074590f1()0.020080 с.26.92 %
81 000 0000.0545090.074485f1()0.019976 с.26.82 %
91 000 0000.0546810.074630f1()0.019949 с.26.73 %
Всего: 9 000 0000.4915120.671955f1()0.180443 с.26.85 %
Сервер: (php 7.2.0 RC 1)
вызововвремя f1()время f2()победилбыстрее на
11 000 0000.0774150.105765f1()0.028350 с.26.8 %
21 000 0000.0634010.105080f1()0.041679 с.39.66 %
31 000 0000.0432850.055173f1()0.011888 с.21.55 %
41 000 0000.0440850.056424f1()0.012339 с.21.87 %
51 000 0000.0456810.057604f1()0.011923 с.20.7 %
61 000 0000.0437570.055212f1()0.011455 с.20.75 %
71 000 0000.0434720.054673f1()0.011201 с.20.49 %
81 000 0000.0434290.056345f1()0.012916 с.22.92 %
91 000 0000.0437420.055458f1()0.011716 с.21.13 %
Всего: 9 000 0000.4482670.601734f1()0.153467 с.25.5 %

Тест со строками

Сделал несколько разных тестов со строками и указания типов переменных (php будет подгонять под тип выходящие/выходящие переменные функции), во всех примерно одинаковые результаты с перевесом 1 функции.. Приведу последний, специально поданы перевёрнутые типы..

function test1($x,$y){
  return $x.=$y;
}
function test2(string $x, string $y): string{
  return $x.=$y;
}
function f1(){
  $i=0;$x='';while(++$i<LOOP)$x=test1((int)$x,$i);
}
function f2(){
  $i=0;$x='';while(++$i<LOOP)$x=test2((int)$x,$i);
}
Компьютер: (php 7.1.4)
вызововвремя f1()время f2()победилбыстрее на
110 0000.0049940.005149f1()0.000155 с.3.01 %
210 0000.0050410.005121f1()0.000080 с.1.56 %
310 0000.0050770.005282f1()0.000205 с.3.88 %
410 0000.0050190.005140f1()0.000121 с.2.35 %
510 0000.0048720.005035f1()0.000163 с.3.23 %
610 0000.0049550.005089f1()0.000134 с.2.63 %
710 0000.0050380.005091f1()0.000053 с.1.04 %
810 0000.0049820.005101f1()0.000119 с.2.33 %
910 0000.0049230.005027f1()0.000104 с.2.07 %
Всего: 90 0000.0449010.046035f1()0.001134 с.2.46 %
Сервер: (php 7.2.0 RC 1)
вызововвремя f1()время f2()победилбыстрее на
110 0000.0038160.003987f1()0.000171 с.4.28 %
210 0000.0037810.004040f1()0.000259 с.6.41 %
310 0000.0037720.003961f1()0.000189 с.4.77 %
410 0000.0037730.004015f1()0.000242 с.6.03 %
510 0000.0038060.003989f1()0.000183 с.4.59 %
610 0000.0038010.003985f1()0.000184 с.4.62 %
710 0000.0037920.003980f1()0.000188 с.4.72 %
810 0000.0037950.003974f1()0.000179 с.4.51 %
910 0000.0038730.003994f1()0.000121 с.3.03 %
Всего: 90 0000.0342090.035925f1()0.001716 с.4.78 %

Заключение

Опечален, ожидал большего. С точки зрения контроля типов данных - имеет смысл использовать, с точки зрения производительности - нет. Причём ввод скрипта в режим строгой проверки типизации declare(strict_types=1); не меняет картину. Можно и ранее было привести к типу, например необходима строка - return (string)$y;

Всё по тем же рельсам идёт: любая упаковка в классы структуры итп. тормозит скрипт; лишний код, длинные переменные и всё что заставляет компилятор удлинять сценарий чтения или выполнения - опять имеем снижение производительности..

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





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