PHP APC – czy warto korzystać z opcode caching?

Dawno na blogu nie pisałem nic o optymalizacji – postanowiłem odświeżyć temat.
Obecnie bardzo wiele osób korzystających z PHP używa do tego standardowego zestawu LAMP (Linux + Apache + MySQL + PHP) i dla nich będzie ten wpis.

W używaniu LAMP nie ma w tym nic złego. I nie zamierzam nikomu kazać zmieniać przyzwyczajeń lub uczyć się nowego oprogramowania. Za to pokażę jak łatwo można zmniejszyć zużycie zasobów naszej maszyny (szczególnie pamięci RAM) korzystając z opcode caching, czyli tzw. akceleratorów do PHP.

Jednym z rodziny opcode caching jest APC, gdzie o sposobie jego używania już Wam pisałem. Dzisiaj chciałbym pokazać Wam, że w wypadku gdy korzystamy z frameworka powinniśmy zawsze korzystać z APC. W moim przykładzie oprę się o wyniki dla Zend Frameworka.

Postawiłem LAMP w oparciu o aktualną wersję Debiana. Stworzyłem za pomocą Zend_Tool pustą aplikację w oparciu o ZF.
W bazie stworzyłem jedną pustą tabelę user z polem id i name. W IndexController::indexAction w prosty sposób z niej skorzystałem i dodałem prostą metodę zliczającą zajętość pamięci w taki oto sposób:

Przy braku korzystania z APC na mojej maszynie developerskiej uzyskałem wynik:

Wynika z tego, że skorzystanie z ZF wymaga 5.5 MB, i użycie dodatku w postaci  Zend_DB zjada dodatkowo 0.5 MB RAM. Czy to dużo?
Aplikacja, która korzysta ze średniej ilości dodatków ZF w postaci helperów, bazy, formularzy, validatorów zużywa już około 30 MB pamięci

Po tym gdy aktywowałem APC, w taki sposób jak opisywałem we wcześniejszych postach zużycie dla całej naszej aplikacji spada 3-krotnie:

Dla wspomnianej średniej aplikacji ZF owe zużycie również spada trzykrotnie do około 10 MB. Jest to bardzo duży zysk. W naszym przypadku zauważcie, że posługujemy się „jedną instancją aplikacji”.

Podsumowując – warto – oszczędzamy pamięć, jak również mamy zysk na czasie wykonywania się aplikacji.
Każdy framework ma to do siebie, że jest zbudowany z wielu klocków (duża zaleta), ale wiąże się to również z dużą ilością plików do przeczytania i wykonania (w przypadku PHP) co opcode caching jest w stanie bardzo przyspieszyć.