2016-06-26 12 views
0

Ich benutze PHP-FPM 5.6 Version.Wie beschleunige ich die PHP-Ausführung, indem ich zwischengespeicherte Ergebnisse verwende?

php -v zeigt, dass OPcache vorhanden ist.

Ich habe ein PHP-Skript, das Parameter akzeptiert und mir die gleiche 2.2k HTML-Ausgabe die ganze Zeit gibt.

Die Skriptausführung beinhaltet keine Verbindung zu MySQL. In den Chrome Developer Tools sehe ich eine Ausführungszeit von 900ms.

Ich finde, dass dies relativ langsam ist.

Ich möchte diese Ausführungszeit verkürzen.

Vorausgesetzt, dass OPcache mit dieser Version von PHP vorhanden ist, kann ich es verwenden, um das Ergebnis meiner PHP-Skriptausführung für eine schnellere Antwortzeit zwischenzuspeichern?

Oder wenn es einen alternativen Ansatz gibt?

Jede Konfiguration in php.ini, /etc/php.d/10-opcache.ini oder /etc/php-fpm.d/www.conf optimiert werden?

Und wie kann ich das zwischengespeicherte Ergebnis bei Bedarf löschen?

+3

Aus dem Handbuch: „OPcache verbessert PHP Performance durch Speichern vorkompilierte Skript Bytecode im gemeinsam genutzten Speicher, wodurch die Beseitigung der Notwendigkeit für PHP zu laden und zu analysieren Skripte für jede Anfrage. ". Mit anderen Worten, die Bytecode-Ausführungsausgabe wird nicht zwischengespeichert. Siehe: http://php.net/manual/en/book.opcache.php Sie müssen etwas anderes verwenden. Eine langsame Ausführung kann auch eine Folge einer langsamen Verbindung sein, besser die Ausführungszeit auf dem Server selbst messen. Ein schnellerer Server könnte ebenfalls helfen. :-) –

+1

bevor Sie verrückt gehen zu konfigurieren, zu verifizieren, was passiert Server-Seite. Mit Apache (sorry, ich kenne skwat bout nginx), lade ich mod_log_config und setze das LogFormat auf 'LogFormat% h% l% u% t% r%% s% b% T /% DI:% IO :% O "üblich". Dies ergibt etwas wie '127.0.0.1 - - [26/Jun/2016: 15: 19: 05 -0400] "POST /system/cron/do.php HTTP/1.1" 200 197 0/10786 I: 331 O: 425 ', dh diese bestimmte Anfrage dauerte ganze 10,8 ms. Sie möchten diese Zahl mit Ihren 990 ms vergleichen. – YvesLeBorg

+0

@ YvesLeBorg macht Sinn. Gibt es ein LogFormat-Äquivalent für 'nginx'? – KDX

Antwort

3

Ich weiß, dass dies Ihre Frage nicht direkt beantwortet, aber es könnte nützlich sein. Die Art und Weise die Ausführungszeit messen konnten diese beiden Funktionen beinhalten:

function getMicroTime() 
// return time in whole seconds with microseconds 
{ 
    return microtime(TRUE); 
} 


function getUserTime() 
// this clock only runs when we have CPU cycles, so it runs slower that the normal clock 
// use this to accurately time the excution time of scripts instead of the above function 
{ 
    $usage = getrusage(); 
    return $usage["ru_utime.tv_sec"]+0.000001*$usage["ru_utime.tv_usec"]; 
} 

Zu Beginn des Skripts Sie die Startzeiten speichern:

$startMicroTime = getMicroTime(); 
$startUserTime = getUserTime(); 

dass also am Ende Sie die Ausführungszeit Echo kann:

echo 'Full time = '.round(1000*(getMicroTime()-$startMicroTime),2).' ms<br>'; 
echo 'User time = '.round(1000*(getUserTime()-$startUserTime),2).' ms<br>'; 

Auch dies beantwortet nicht Ihre Frage, aber es könnte nützlich sein. Ok, machen dieses eine gültige Antwort, haben ein hier lesen:

https://www.addedbytes.com/articles/for-beginners/output-caching-for-beginners/

+0

Folgen Sie Ihrem früheren Kommentar, der Server, den ich benutze, ist ein frisches VPS mit Wordpress für Staging/Testing Zweck installiert. Derzeit kein Verkehr und sollte volle Ressource verfügbar haben. Ich benutze W3 Total Cache + Memcached, um die zwischengespeicherte Startseite aus dem Speicher zu bedienen. In Chrome Developer Tools wird "85 ms" angezeigt. Daher ist die Ausführung eines einfachen PHP-Skripts mit statischer HTML-Ausgabe und keiner MySQL-Konnektivität, wie ich oben erwähnt habe und die mich über '900ms' hinausbringt, nichts, was ich erwarte. Gibt es eine "Bytecode-Ausführungsausgabe" -Caching-Lösung, die ich über "OPcache" hinzufügen kann? – KDX

+0

Der Artikel ist interessant, aber ich beabsichtige nicht, meine eigene Caching-Lösung von Grund auf neu zu implementieren, sondern nach einer Möglichkeit zur Integration mit bestehenden Tools zu suchen. – KDX

+0

Ich habe gehört, dass Mencached dafür verwendet wird: http://php.net/manual/en/intro.memcached.php, aber ich habe selbst keine Erfahrung damit. –