Page tree
Skip to end of metadata
Go to start of metadata

Mimořádného zlepšení výkonu Vivo projektů lze dosáhnout přechodem z klasického Zend Engine (ať už v podobě Apache modulu mod_php5 nebo spouštěného web serverem přes rozhraní FastCGI) na HHVM (HipHop Virtual Machine) od Facebooku. V praxi tak lze dosáhnout zkrácení času sestavení stránek na polovinu až třetinu (!). Omezením je fakt, že HHVM je oproti Zend Engine monolitický systém, který neobsahuje některé z méně používaných PHP extensions (jmenovitě DBLIB pro spojení s Microsoft SQL Server a OCI8 pro napojení na Oracle database). V tradičním LAMP prostředí ale funguje výtečně.

Pro běh na HHVM bude Vivo 2 produkčně optimalizováno od verze 2.2.15 (aktuálně drobné optimalizace jsou v develop). Návod na instalaci HHVM do vlastního prostředí naleznete zde.

 

V případě použití Apache lze zpracování PHP delegovat změnou fallback rewrite-u v public/.htaccess souboru z klasického

RewriteRule ^(.*)$ index.php/$1 [NC,L]

na

RewriteRule ^(.*)$ fcgi://127.0.0.1:9000%{DOCUMENT_ROOT}/index.php/$1 [P,L]


Použití HHVM nicméně též umožnuje zcela Apache vypustit a propojení web serveru s HHVM realizovat přímo v NGINX web serveru dosud typicky používaném před Apache jako proxy cache. Výsledkem je maximálně výkonné běhové prostředí! NGINX konfigurace pro konkrétní web pak vypadá následovně

fastcgi_cache_path /var/cache/nginx/some-project levels=1:2 keys_zone=some-project:8m max_size=10g inactive=60m;

server {
        listen 80;
        server_name www.some-project.com;
        charset utf-8;
        index index.php;
        root /var/www/site/some-project/public;

        set $no_cache 0;
        if ($request_uri ~* "/(system/)") {
                set $no_cache 1;
        }

        location /index.php {
                fastcgi_cache_key "$scheme$request_method$host$request_uri";
                fastcgi_cache some-project;
                fastcgi_cache_valid 200 302 7d;
                fastcgi_cache_valid 404 1m;
                fastcgi_cache_methods GET HEAD;
                fastcgi_cache_bypass $no_cache;
                fastcgi_no_cache $no_cache;
                add_header X-Cache $upstream_cache_status;

                fastcgi_keep_conn on;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

        location / {
                try_files $uri /index.php?$query_string;
        }

        location ~ /\.ht {
                deny all;
        }

        access_log /var/www/log/some-project_access.log;
        error_log /var/www/log/some-project_error.log;
}