Я б хотів увімкнути попереднє завантаження opcache ( RFC ) на своїх виробничих серверах за допомогою PHP 7.4. Я використовую Symfony , але це стосується всіх PHP.
Я б хотів увімкнути попереднє завантаження opcache ( RFC ) на своїх виробничих серверах за допомогою PHP 7.4. Я використовую Symfony , але це стосується всіх PHP.
Відповіді:
Перш за все слід додати:
opcache.preload=/path/to/project/preload.php
твоєму php.ini
Потім у вашому PHP-скрипті ви повинні передати opcache_compile_file($file);
кожен файл, який ви хочете попередньо завантажити.
Згідно з повідомленням у блозі, це видається тривіальним. Мабуть, Symfony з 4.4 створює сценарій попереднього завантаження, який повинен бути встановлений у php.ini
:
opcache.preload=/path/to/project/var/cache/prod/App_KernelProdContainer.preload.php
Я робив кілька тестів у моєму локальному середовищі Докер, і ось як це пішло:
PHP 7.3 без OPcache (поточний)
Requests per second: 8.75 [#/sec] (mean)
Time per request: 114.402 [ms] (mean)
PHP 7.4 без OPcache
Requests per second: 11.44 [#/sec] (mean)
Time per request: 87.417 [ms] (mean)
PHP 7.4 з OPcache, без попередньої завантаження (Apache + modphp)
Requests per second: 30.25 [#/sec] (mean)
Time per request: 33.053 [ms]
PHP 7.4 з OPcache, без попередньої завантаження (nginx + php fpm)
Requests per second: 40.00 [#/sec] (mean)
На жаль, я не зміг увімкнути попередню завантаження :( у мене виникли такі помилки (і в Apache + Mod, і в Nginx + FPM):
double free or corruption (!prev)
child pid 17 exit signal Aborted (6), possible coredump (…)
Ця функція схожа на WIP . Я збираюсь повторно підтвердити цю відповідь, коли зможу використовувати цю річ, яку попередньо завантажувати. В цілому я дуже вражений, + 30% продуктивності лише завдяки переходу на PHP 7.3
до 7.4
.