Archiwum kategorii: Wydajność kodu

Zephir – nowe narzędzie do tworzenia i utrzymywania rozszerzeń dla PHP

Ze(nd Engine) Ph(p) I(nte)r(mediate), czyli dzisiaj o nowym narzędziu do tworzenia i utrzymywania rozszerzeń dla PHP.

Niedawno odwiedziłem stronę: https://zephir-lang.com/

PHP is one of the most popular languages in use for the development of web applications. Dynamically typed and interpreted languages like PHP offer very high productivity due to their flexibility. Since version 4 and then 5, PHP is based on the Zend Engine implementation. This is a virtual machine that executes the PHP code from its bytecode representation. Zend Engine is almost present in every PHP installation in the world, with Zephir, you can create extensions for PHP running under the Zend Engine. PHP is hosting Zephir, so they obviously have a lot of similarities, however; they have important differences that give Zephir its own personality. For example, Zephir is more strict, and it could be make you less productive compared to PHP due to the compilation step.

Postanowiłem sprawdzić czy rzeczywiście następuje przyspieszenie. Jednym z najczęciej wykorzystywanych funkcjonalności w sklepie internetowym jest obliczanie ceny. W tym celu przepisałem jedną z naszych libek: https://packagist.org/packages/ayeo/price do formatu Zephira, skompilowałem i wykonałem test wydajności na prostym rachunku:

Wersja php:

1

Wersja z przekompilowanego rozszerzenia:

2

W każdej iteracji kwoty netto były losowane z przedziału od 10 do 100, działanie pozostawało te same. Poniżej wyniki:

3

Jednak nie kłamali: 3-krotnie szybszy kod 🙂

Autorem tekstu jest Marek Rode.

file_exists » performance

Trywialny temat: porównanie czasu wykonania poszczególnych funkcji sprawdzających dostępność pliku.

Testy zostały przeprowadzone na wersji php:
1

W każdej iteracji funkcja sprawdzała jeden losowy plik spośród 20 tysięcy istniejących. Po każdym wykonaniu funkcji wywoływano funkcję clearstatcache celu opróżnienia cache. Wyniki prezentują się następująco:2

W zestawieniu znalazła się również funkcja stream_resolve_include_path ze względu na http://php.net/file_exists

Warning This function returns FALSE for files inaccessible due to safe mode restrictions. However these files still can be included if they are located in safe_mode_include_dir.

W sytuacji includowania to, że plik istnieje nie oznacza, że jest gotowy do odczytu. Poprawniejszym rozwiązaniem jest wykorzystanie: http://php.net/stream_resolve_include_path

Resolve filename against the include path according to the same rules as fopen()/ include.

Pozostałe wnioski pozostawiam czytelnikom 🙂

Autorem tekstu jest Marek Rode.