Optymalizacja uruchamiania OPcache PHP

Na przykład w przypadku witryn opartych na WordPress , Joomla lub Laravel , które nie zawierają treści specyficznych dla użytkownika, zaleca się przechowywanie wszystkich stron w statycznej pamięci podręcznej HTML i ponowne generowanie pamięci podręcznej tylko ręcznie (lub automatycznie) po wprowadzeniu zmian w zapleczu. Jednakże, jeśli strona zawiera dynamiczną zawartość, która zależy od sesji i plików cookie lub również od języka i lokalizacji, OPcache jest odpowiedni .


Tak zwany czas rozruchu dla wszystkich trzech wymienionych systemów wynosi ponad 100 ms ze świeżo zainstalowanym serwerem CentOS7 (z dyskiem SSD i PHP 7.1). Za każdym razem, gdy wykonywany jest skrypt PHP, musi on zostać wkompilowany w kod bajtowy w czasie wykonywania. OPcache implementuje teraz pamięć podręczną dla tego kodu bajtowego - jeśli ten sam skrypt PHP jest wykonywany przy następnym żądaniu, nie trzeba go ponownie kompilować. Po uruchomieniu OPcache ustalamy następujące ustawienia:

9006cec6c5d3d2498ee26c5bfd91590a

Czas wykonania (uśredniony z 10 wykonań) został teraz znacznie skrócony:

WordPress 4.7.4 Joomla 3.7.0 Laravel 5.4
bez OPcache 295 ms 201 ms 110 ms
z OPcache 54 ms 59 ms 13 ms
Czynnik 5,5 3,5 8,5

Ponieważ ustawiliśmy validate_timestamps na 0 i jednocześnie revalidate_freq na jeden dzień, pamięć podręczna prawie nigdy nie jest odbudowywana automatycznie (świadomie robimy to ręcznie). Z małym hakiem git , skrypt PHP jest wykonywany przy każdym „ściągnięciu”. Jak aktywować hak:

a1678610c8b4c7db5997375944183830

a1678610c8b4c7db5997375944183830

Poniższa funkcja pomocnicza jest również pomocna do pomiaru poszczególnych części kodu (lub całego czasu wykonania):

085f4291bbcc4e8a64bbea951ff49ab9

Jeśli chcesz uzyskać przydatne informacje, takie jak status, użyta pamięć lub liczba plików w pamięci podręcznej, możesz użyć tej funkcji PHP:

3f6309d04bc7e48dd909859321b96209

Aby skorzystać z OPcache w lokalnym środowisku programistycznym (co generalnie nie jest zalecane), używamy sztuczki.

OPcache jest aktywny na wszystkich serwerach, na których zainstalowany jest moduł OPcache i na których ustawienie opcache.enable nie jest jawnie ustawione. Zostawiamy to w ten sposób. W php.ini ustawiliśmy tylko opcache.validate_timestamps = 1. Oznacza to, że opcache.revalidate_freq = 2. Oznacza to, że OPcache jest rewalidowany prawie w sposób ciągły dla każdego projektu. W przypadku projektów, w których chcemy trwale aktywować OPcache, korzystamy z projektów projektowych w .htaccess następujące ustawienie:

1dd64a3f2fe4425b29b1409410fe3fc0

Następnie ponownie uruchamiamy serwer WWW i tworzymy następujący skrypt:

91fb5289160e410607c9ea89112a575b

Ten skrypt czyści pamięć podręczną i jednocześnie ją odbudowuje. Teraz ustawiliśmy polecenie RunOnSave związane z obszarem roboczym w naszym ulubionym edytorze VSCode:

91fb5289160e410607c9ea89112a575b

Plecy