26 listopada pojawiła się nowa wersja PHP 8.0.0. To bardzo duża zmiana, nie tylko w numerowaniu, ale i pod względem „wnętrzności” oraz możliwości języka. Niektórzy powiedzieliby, że PHP z każdym dużym wydaniem coraz bardziej przypomina język programowania i coś w tym jest, choć ja przestałem tak bardzo narzekać już od wersji 7.0. A wersja 7.4 była prawie idealna. Czy wszystkie te „prawie” wygładzi wersja 8.0? Prawie 🙂 W każdym razie, na pewno język się mocno rozwija i jest coraz lepszy, ale o nowościach w PHP 8 napisano już sporo artykułów. Ja wziąłem na warsztat prędkość nowego wydania i postanowiłem ją porównać z poprzednimi.
Środowisko testowe
Zanim przejdziemy do samych testów, przedstawię środowisko testowe. Niestety, nie mogłem przeznaczyć do tego dedykowanego komputera, jednak mój codzienny laptop, w weekend, zmienił się w taką maszynę. Wyłączyłem wszystkie procesy, które byłem w stanie wyłączyć, odłączyłem komputer od internetu, starałem się go maksymalnie izolować od potencjalnych źródeł zakłóceń. Laptop ma:
Procesor | Pamięć RAM | Dysk | System |
---|---|---|---|
Intel Core i7 2670QM | 32GB DDR3 800MHz | Plextor 512GB 2,5″ SATA SSD M8VC | Windows 10 Home |
Przetestowałem następujące wersje PHP:
Wersja PHP | Wersja Zend Engine | Data kompilacji |
---|---|---|
5.2.17 | 2.2.0 | 06.01.2011, 17:28:41 |
5.3.29 | 2.3.0 | 15.08.2014, 19:17:16 |
5.4.45 | 2.4.0 | 02.09.2015, 23:48:30 |
5.5.38 | 2.5.0 | 20.07.2016, 11:16:03 |
5.6.40 | 2.6.0 | 09.01.2019, 15:10:36 |
7.0.33 | 3.0.0 | 05.12.2018, 21:22:29 |
7.1.33 | 3.1.0 | 23.10.2019, 09:24:14 |
7.2.34 | 3.2.0 | 01.10.2020, 10:24:14 |
7.3.25 | 3.3.25 | 24.11.2020, 13:41:33 |
7.4.13 | 3.4.0 | 24.11.2020, 12:43:32 |
8.0.0 | 4.0.0-dev | 24.11.2020, 22:02:57 |
Co się nasuwa, jako pierwsze? Oczywiście pomijając to, jak starego laptopa używam… Wraz z wersją 8 skompilowano Zend w wersji developerskiej. Nie wiem, czy ma to wpływ na wydajność, czy nie. Druga rzecz, to bardzo wczesna wersja 8. Pierwsza, podczas gdy wersja 5.4 to nawet czterdziesta – (wliczając 0 jako pierwszą) – szósta kompilacja. To też może mieć jakiś wpływ. Zobaczymy.
Co tak właściwie testowałem?
Przygotowałem dziewiętnaście testów, od najprostszych po nieco bardziej skomplikowane. Każdy test wykonałem tysiąc razy, w dwustu iteracjach, co oznacza, że każdy kod był wykonany dwieście tysięcy razy. Czyli niecałe cztery miliony testów, aby uzyskać jak najbardziej uśrednione wyniki. Potem odrzuciłem wyniki skrajne, które – szczególnie ze względu na to, że to jednak roboczy laptop, mogły zaburzyć wynik. I rzeczywiście, policzyłem standardową dewiację dla pełnych wyników i dla tych, dla których odrzuciłem skrajne wartości, poprawa była zauważalna, często nawet spadała trzykrotnie.