Zapomnijcie o HHVM, nadchodzi PHPNG (aka PHP 6.0)

Za kilka tygodni będziemy mogli się cieszyć w pełni stabilnym PHP 5.6. Tymczasem w kwietniu tego roku powstało odgałęzienie PHP o nazwie PHPNG (Next Generation).

Dmitry Stogov z Zenda 5 maja 2014 roku opublikował opis zasady działania PHPNG oraz małe porównanie szybkości w stosunku do PHP 5.5.

Ale czym dokładnie jest PHPNG? Dmitry od dłuższego czasu eksperymentował z silnikiem JIT (Just In Time compilation) wykorzystując LLVM (przypomnę, że w 2008 roku była już podobna próba i powstał PECL LLVM). Wbudowanie tego rozwiązania do OPCache przyspieszyło działanie aplikacji tylko o kilka procent (chociaż wynik w samym bench.php polepszył się 10x). Ta sytuacja pozwoliła zrozumieć, że naprawdę wąskie gardło jest gdzieś indziej. Zespół rozwijający PHPNG przeanalizował na co standardowa aplikacja PHP wykorzystuje zasoby CPU:

  • około 20% czasu CPU to memory manager
  • 10% poświęca na operacje związane z hashowaniem tabel
  • 30% czasu to funkcje wewnętrzne
  • oraz 30% to VM

Sam VM został już zoptymalizowany za pomocą powyższych hacków. Trzeba było zająć się optymalizacją działania pozostałych składowych, szczególnie alokacji pamięci. Dzięki tym zabiegom typowa aplikacja przyspieszyło o 20%. Tylko dzięki zmianie PHP 5.5 na PHPNG. Jak to wygląda w praktyce?

  • WordPress 3.6 – 20.0% szybszy (253 vs 211 req/sec)
  • Drupal 6.1 – 11.7% szybszy (1770 vs 1585 req/sec)
  • Qdig – 15.3% szybszy (555 vs 482 req/sec)
  • ZF test app – 30.5% szybszy (217 vs 166 req/sec)

PHPNG jest „prawie” stabilne, działa większość rozszerzeń. Jeśli macie chwilę możecie pobrać gałąź i skompilować (instrukcja).
HHVM jest świetne w pewnych sytuacjach (chociaż nadal nie jest w pełni kompatybilny z ZF czy Symfony), ale musimy pamiętać że tworzy go firma zewnętrzna. Natomiast PHPNG jest rozwijane jako wewnętrzny projekt, i miejmy nadzieję że zostanie włączony do PHP 6.

Swoją drogą trwa obecnie dyskusja dotycząca nazewnictwa kolejnej dużej wersji PHP. Nie jest do końca pewne czy to będzie PHP6 (nazwa wałkowana od lat), czy nie lepiej przeskoczyć jeden numer i nazwać PHP 7.

PS: Stabilność aktualnie rozwijanej gałęzi (PHP 5.6) można sprawdzić na Travisie.