for vs while
Как обещал ранее в тесте PHP функций с массивом, в этот раз посмотрим какой цикл быстрее for vs while.
Тесты PHP проводились на двух конфигурациях
Компьютер:Apache/2.4.34 PHP 7.2.10 Linux version 4.15.0-45-generic (Kubuntu 18.04.2 LTS (Bionic Beaver) x86_64) 12 x AMD Ryzen 5 1600X @ 3.70GHzСервер:
Apache/2.4.38 PHP 7.2.15 Linux version 2.6.32-042stab127.2 (Red Hat 4.4.6-4) (CENTOS 6.10 x86_64) 4 x Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz
Функции тестирования, 90 000 000 вызовов
define('LOOP',10000000); 1. for($i=0; $i<LOOP; $i++){ if($i==1000001){} } 2. for($i=LOOP; $i>0; $i--){ if($i==1000001){} } 3. $i=0; while($i<LOOP){ if($i==1000001){} $i++; } 4. $i=LOOP; while($i>0){ if($i==1000001){} $i--; }
Результаты в порядке возрастания
Компьютер:№ | функция | время | быстрее на | |
---|---|---|---|---|
2 | for($i=LOOP; $i>0; $i--) | 0.895657 | 0.000000 с. | 0 % |
4 | while($i>0) | 0.901333 | +0.005676 с. | +0.63 % |
1 | for($i=0; $i<LOOP; $i++) | 1.104547 | +0.208890 с. | +18.91 % |
3 | while($i<LOOP) | 1.113707 | +0.218050 с. | +19.58 % |
№ | функция | время | быстрее на | |
---|---|---|---|---|
3 | while($i<LOOP) | 0.971064 | 0.000000 с. | 0 % |
1 | for($i=0; $i<LOOP; $i++) | 0.975606 | +0.004542 с. | +0.47 % |
4 | while($i>0) | 1.019433 | +0.048369 с. | +4.74 % |
2 | for($i=LOOP; $i>0; $i--) | 1.047586 | +0.076522 с. | +7.3 % |
Забавные результаты, пока AMD не отжала серверный рынок, равняться будем на показания сервера, таким образом в порядке возрастания - либо while либо for. Учитывая результаты предыдущего тестирования победителем назначаю for($i=0; $i<LOOP; $i++).