Porównanie prędkości PHP od 5.2 do 8.0

Test szybkości PHP 5.2 do PHP 8.0

1. Pusta pętla

Najprostszy test, który powinien wykonywać się błyskawicznie – po prostu pusta pętla, która nie robiła nic, poza tym, że się „kręciła”.

2. Operacje bitowe

Zadanie polegające na wykonaniu kilkunastu operacji na bitach. Było to zarówno AND, OR, NOT, XOR oraz przesunięcia bitów w lewo i w prawo.

3. Dodawanie

Tym razem zadaniem było dodawanie wartości w zmiennych, jak i wpisanych w kodzie. Tyczyło zarówno liczb całkowitych, jak i zmiennoprzecinkowych. Dodawanie za pomocą różnych operatorów, w różnych konfiguracjach.

4. Odejmowanie

Zadanie analogiczne do dodawania, jednak wszędzie zmieniłem znak z plusa na minus.

5. Mnożenie

Zadanie polegało, oczywiście, na mnożeniu. Analogicznie do dodawania.

6. Dzielenie

Tym razem dzielenie, analogiczne do mnożenia. Bez sprawdzania, czy nie dzielę przypadkiem przez zero (upewniłem się co do tego, używając stosownych wartości).

7. Operacje matematyczne

To zadanie miało na celu połączyć dodawanie, odejmowanie, mnożenie i dzielenie, plus kilka prostych operacji w rodzaju policzenia przeciwprostokątnej, pola powierzchni koła (wykorzystując funkcję pi()).

8. Operacje trygonometryczne

Tym razem skupiłem się na funkcjach cosinus, sinus, tangens i tangens hiperboliczny. Przeliczenia stopni do radianów były wykonane poza pętlą.

9. Operacje na tablicach

Typowe operacje na tablicach, łączenie, suma, zliczanie elementów, pobranie kluczy, pobranie wartości, sprawdzenie czy w tablicy znajduje się zadana wartość.

10. Porównywanie wartości

W tym teście sprawdzałem porównywanie wartości ze sobą, zarówno porównaniami słabymi (==, !=) jak i mocnymi (===, !==). Dodatkowo test większości i mniejszości, oraz mniejsze-równe i większe-równe.

11. Instrukcje warunkowe

Przetestowałem zarówno if, elseif, else jak i switch. Chętnie przetestowałbym też choćby match, no ale to tylko PHP 8, więc nie miałoby sensownego porównania.

12. Pętle

Tutaj testowałem pętle for, foreach, while oraz do. Bardzo krótkie, cały test to była wielka pętla, w każdym przypadku.

13. Funkcje

Stworzyłem kilka funkcji i je wywoływałem w różnych kombinacjach.

14. Klasy

Test analogiczny do funkcji, tylko wykorzystałem klasy i ich metody oraz pola.

15. Operacje na łańcuchach

Zadanie polegało na operowaniu na łańcuchach ASCII, bez wykorzystywania żadnych znaków specjalnych. Typowe operacje łączenia, funkcje strpos, substr, strtolower czy też strtoupper.

16. Operacja na łańcuchach UTF8

Zadanie analogiczne do powyższego, jednak z zastosowaniem funkcji mb_* oraz polskich znaków.

17. Obrazy

To test, w którym tworzyłem obrazy i ustawiałem kolorowe piksele, korzystając z biblioteki GD

18. POST/GET

Wywoływanie metod POST i GET. Tutaj znaczenie miała szybkość odpowiedzi serwera, dlatego skorzystałem z serwera lokalnego (komputer był odłączony od internetu), aby zapewnić maksymalnie identyczne warunki testu.

19. WordPress

W końcu zadanie związane z tematyką bloga, a więc WordPress. Niestety, nie mogłem użyć najnowszej wersji (w chwili przeprowadzania testu był to WordPress 5.5.3), ponieważ od wersji 5.2, WordPress wymaga PHP w wersji co najmniej 5.6. Wobec tego, PHP w wersjach 5.6, 7.x i 8.0 zostały przetestowane z najnowszą wersją WordPress a wcześniejsze wersje PHP przetestowałem z WordPress 5.1.8, ostatnim, który działał na poprzednich wersjach interpretera. Dlaczego nie przetestowałem wszędzie tej samej wersji, bo przecież WP 5.1.8 ruszy i na PHP 8? Zapewne, nie sprawdzałem w sumie… Ano, częściej instalujemy najnowszego WordPressa, na najnowszych wersjach PHP, więc to porównanie wydało mi się dużo ciekawsze.

Bezpośredni link do dziewiątej strony, z podsumowaniem

A zatem do dzieła!