list vs array
Стало интересно, что будет быстрей в php list vs array, синтаксис list($n,$m)=[]; удобней чем $a=[]; $n=$a[0]; $m=$a[1]; осталось посмотреть на результаты.
Тесты PHP проводились на двух конфигурациях
Компьютер:Apache/2.4.46 PHP 8.0.2 Linux version 4.15.0-136-generic (Kubuntu 18.04.5 LTS (Bionic Beaver) x86_64) 12 x AMD Ryzen 5 1600X @ 3.60GHzСервер:
Apache/2.4.39 PHP 7.3.4 Linux version 4.18.15-1.el7.elrepo.x86_64 (CentOS Linux release 7.7.1908 (Core)) 2 x Intel(R) Xeon(R) CPU E5-2690 0 @ 2.90GHz
Функции тестирования, 90 000 000 вызовов
define('LOOP',10000000); function f1(){ $i=$n=$m=0;$a=[]; while(++$i<LOOP){ $a=[0=>$i,1=>$i]; $n=$a[0]; $m=$a[1]; } } function f2(){ $i=$n=$m=0;$a=[]; while(++$i<LOOP){ list($n,$m)=[0=>$i,1=>$i]; } }
Результаты тестирования
Компьютер:№ | вызовов | время f1() | время f2() | победил | быстрее на | |
---|---|---|---|---|---|---|
1 | 10 000 000 | 0.576665 | 0.577789 | f1() | 0.001124 с. | 0.19 % |
2 | 10 000 000 | 0.560358 | 0.583653 | f1() | 0.023295 с. | 3.99 % |
3 | 10 000 000 | 0.561709 | 0.582852 | f1() | 0.021143 с. | 3.63 % |
4 | 10 000 000 | 0.575012 | 0.594636 | f1() | 0.019624 с. | 3.3 % |
5 | 10 000 000 | 0.568714 | 0.588363 | f1() | 0.019649 с. | 3.34 % |
6 | 10 000 000 | 0.557934 | 0.587272 | f1() | 0.029338 с. | 5 % |
7 | 10 000 000 | 0.557981 | 0.594532 | f1() | 0.036551 с. | 6.15 % |
8 | 10 000 000 | 0.560189 | 0.578714 | f1() | 0.018525 с. | 3.2 % |
9 | 10 000 000 | 0.569931 | 0.587479 | f1() | 0.017548 с. | 2.99 % |
Всего: 90 000 000 | 5.088493 | 5.275290 | f1() | 0.186797 с. | 3.54 % |
№ | вызовов | время f1() | время f2() | победил | быстрее на | |
---|---|---|---|---|---|---|
1 | 10 000 000 | 0.673458 | 0.753494 | f1() | 0.080036 с. | 10.62 % |
2 | 10 000 000 | 0.646367 | 0.750525 | f1() | 0.104158 с. | 13.88 % |
3 | 10 000 000 | 0.649984 | 0.771922 | f1() | 0.121938 с. | 15.8 % |
4 | 10 000 000 | 0.640671 | 0.730327 | f1() | 0.089656 с. | 12.28 % |
5 | 10 000 000 | 0.669277 | 0.751155 | f1() | 0.081878 с. | 10.9 % |
6 | 10 000 000 | 0.668786 | 0.766541 | f1() | 0.097755 с. | 12.75 % |
7 | 10 000 000 | 0.656638 | 0.736108 | f1() | 0.079470 с. | 10.8 % |
8 | 10 000 000 | 0.645864 | 0.731434 | f1() | 0.085570 с. | 11.7 % |
9 | 10 000 000 | 0.645798 | 0.727218 | f1() | 0.081420 с. | 11.2 % |
Всего: 90 000 000 | 5.896843 | 6.718724 | f1() | 0.821881 с. | 12.23 % |
Как видим, вызов list() вызывает потерю производительности, напрямую с массивами работать быстрее.