Imbunatateste viteza codului PHP folosind eAccelerator
2Recent am publicat un articol in care imi exprim parerea cu privire la tendintele din acest an. In acea discutie opiniile au fost impartite cu privire la evolutia limbajului de scripting PHP. Motivul invocat de mine a fost viteza foarte proasta a codului interpretat. Avand in vedere ca in continuare incurajez acest limbaj de programare voi veni si in apararea lui prin diverse articole care prezinta cativa pasi simpli in optimizarea codului.
eAccelerator este un accelerator si un optimizer Open Source pentru PHP. El imbunatateste performantele scripturilor PHP generand un cache din starea lor compilata. Asta inseamna ca overhead-ul generat de compilare este eliminat complet. De asemenea optimizeaza scripturile pentru a le mari executia. Autorii acestuia sustin ca poate imbunatati performantele de pana la 10 ori ceea ce este foarte important.
Trebuie subliniat faptul ca orice analiza a vitezei este subiectiva si depinde de diversele configuratii ale masinilor pe care sunt facute testele, de optimizarea codului in „salbaticie” si multe alte variabile care nu depind de extensie. Totusi, am gasit un benchmarking facut pe Drupal in care sunt comparate eAccelerator, APC si PHP.
Instaleaza eAccelerator
Pentru inceput trebuie sa ai instalat PHP 5 development tools. Poti verifica daca acestea exista executand comanda de mai jos. Daca aceasta este executata atunci poti sari peste pasii urmatori.
phpize -v
Instaleaza PHP/Apache development tools
Debian/Ubuntu: sudo apt-get install php5-dev RHEL/CentOS/*SUSE: yum install php-devel Gentoo: emerge php5-dev Arch Linux: pacman -S php5-dev
Instaleaza ultimul pachet eAccelerator (acum decembrie 2010)
Pentru a instala ultima versiune rulati o distributie de linux si executati comenzile de mai jos pentru descarcare, dezarhivare si instalare.
cd /tmp wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.zip unzip eaccelerator-0.9.6.1.zip cd eaccelerator-0.9.6.1 phpize ./configure --enable-eaccelerator=shared make sudo make install
Configureaza eAccelerator in php.ini
Puteti repera acest fisier cautand „Loaded Configuration File” folosind phpinfo(). Deschideti fisierul si mergeti la finalul lui, unde adaugati urmatoarele setari, avand grija sa modificati calea la zend_extension.
zend_extension = "/usr/lib/php5/20100613+lfs/eaccelerator.so" eaccelerator.shm_size = "0" eaccelerator.cache_dir = "/var/cache/eaccelerator" eaccelerator.enable = "1" eaccelerator.optimizer = "1" eaccelerator.check_mtime = "1" eaccelerator.debug = "0" eaccelerator.filter = "" eaccelerator.shm_max = "0" eaccelerator.shm_ttl = "0" eaccelerator.shm_prune_period = "0" eaccelerator.shm_only = "0" eaccelerator.compress = "1" eaccelerator.compress_level = "7"
Salvati fisierul si restartati serverul Apache. In functie de ce Apache aveti instalat puteti folosi una din comenzile de mai jos.
httpd restart (sau) apache2ctl restart (sau) /opt/lampp/lampp restart (samd)
Pentru a verifica daca instalarea si activarea a decurs cu bine putet vizualiza inca o data phpinfo() si cautati zona unde apare Zend/PHP Version. Va trebui sa observi o similaritate intre imaginea de mai jos si chenarul tau.
Am testat eAccelerator pe Ubuntu 10.10 si s-a comportat exemplar. Asta nu inseamna ca nu va functiona si pe Windows, doar ca instalarea va diferi putin.
E bun eAccelerator. L-am folosit o perioada si a dat rezultate foarte bune. Intr-un final am renuntat la el pentru ca nu e thread safe, deci functioneaza corect doar cand PHP ruleaza ca DSO. Cum tendinta e sa inlocuim DSO cu FastCGI datorita multiplelor avantaje (viteza, izolarea resurselor etc) trebuie cautate alternative. Momentan folosesc APC si xCache.
yea, well, eu sunt excentric, cu toate ca nu suport facebook, tre sa recunosc ca au facut o chestie foarte buna pentru php, si anume hiphop (pentru git: https://github.com/facebook/hiphop-php)
anyhow, hiphop for php e o chestie foarte faina care in 2 cuvinte iti compileaza php-ul in c, asa scapi de sintaxa „o nu php e limbaj de scripting”
the downside: una din cea mai folosita functie in php eval(); nu functioneaza, merge numai pe arhitectura de x64 (cam logic avand in vedere ca e facut pentru servere, deisgur ar fi misto si un 32 de development) si la ora actuala are doar functioneaza doar pentru php 5.2 urmand sa fie introdus si pentru 5.3