Post

PHP Performance 2 - test kopiowania obiektów

Wstęp

W poprzednich postach opisałem jak stworzyć środowisko testowe oraz udostępniłem repozytorium z testami. Dziś zajmiemy się bardziej ambitnym testem. Sytuacja opisana poniżej będzie raczej rzadko spotykana, niemniej jednak jest dość ciekawa.

Więcej na temat wspólnych elementów w testach można przeczytać w pierwszym poście z serii.

Test

Założeniem testu jest utworzenie wielu, takich samych obiektów. Realnym przykładem może być gra "przeglądarkowa", gdzie występuje wielu graczy i istnieją miedzy nimi zależności. Pierwszy przypadek:

$objects = [];
for($i = 0; $i < TEST_COUNT; $i++) {
  $objects[$i] = new TestClass();
}

Oraz drugi:

$objects = [];
$object = new TestClass();
for($i = 0; $i < TEST_COUNT; $i++) {
  $objects[$i] = clone $object;
}

Różnica jest minimalna. W pierwszym przypadku tworzymy x razy ten sam obiekt (inicjalizujemy go), natomiast w drugim wykorzystujemy natywne klonowanie obiektów.

Wyniki

Różnica jest mniej spektakularna niż w pierwszym teście "if-a", jednak wciąż dość istotna. Przy użyciu PHP-a w wersji 5:

$ php5 test-object-copy.php 100000
[2017-09-21 16:00:06] Start
[2017-09-21 16:00:07] Condition 1 time: 0.62121796607971
[2017-09-21 16:00:07] Condition 2 time: 0.33770394325256
[2017-09-21 16:00:07] Finish

oraz w wersji 7:

$ php7 test-object-copy.php 100000
[2017-09-21 16:00:12] Start
[2017-09-21 16:00:12] Condition 1 time: 0.20493793487549
[2017-09-21 16:00:12] Condition 2 time: 0.077710151672363
[2017-09-21 16:00:12] Finish

W przypadku starszej wersji PHP jest to prawie o połowę krócej, natomiast w nowszej prawie 2/3 czasu krócej. Co ciekawe - "dłuższa" wersja w PHP 7 i tak działa szybciej niż "szybsza" w PHP 5. Ten test pokazuje również, że obietnice deweloperów PHP nie były suchymi obietnicami i faktycznie kod jest wykonywany dużo szybciej.


Przejdź do strony głównej


Komentarze

Brak komentarzy

Dodaj komentarz







© 2017 Łukasz Gogołkiewicz. Wszelkie prawa zastrzeżone.