Fast Site Engine

Высокопроизводительная CMS для сайтов.

Сделать сайт

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

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

Скачать
О движкеПроизводительностьБезопасностьТехнические требованияSEOКонтакты

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;

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

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



© Все права защищены 2004 - 2024