Последние записи
Прелоад файлов и классов с помощью opcache.preloader в php 7.4+
В php начиная с версии 7.4 появилась возможность предзагружать файлы проекта в память. Потенциально это позволяет значительно ускорять обращение к ним из файлов проекта. Работает это так:
1. Вы пишете файл в котором перечисляете все необходимые файлы для предзагрузки
2. Добавляете опцию opcache.preload в файл php.ini
3. Перезапускаете httpd сервис
4. Работаете с предзагруженными в память файлами и классами
5. Учитываете, что после внесения изменений в файлы и классы, для их обновления в памяти - httpd сервис необходимо перезапустить.
В наиболее простом виде листинг файла preloader.php
будет таким:
<?
require_once __DIR__.'/local/PATH_TO_VENDOR/vendor/autoload.php';
require_once __DIR__.'/local/PATH_TO_CUSTOM_CLASSES/include/autoload.php';
// File list
$files = [
//'/var/www/data/site/html/file_to_preload.php',
];
// Preload all root project files
foreach ($files as $file) {
require_once $file;
//Or
//opcache_compile_file($file);
}
Предположим, что opcache
уже установлен на вашем сервере и у вас есть root
доступ к нему, тогда идем в файл /etc/php.d/10-opcache.ini
и добавляем команды:
; Root User name. On BitrixVM it is usually root
opcache.preload_user=root
; Full path to your preloader file
opcache.preload=/home/bitrix/ext_www/site/preloader.php
Полный листинг opcache.ini
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=88
opcache.max_accelerated_files=200000
opcache.max_wasted_percentage=1
opcache.validate_timestamps=1
opcache.revalidate_freq=0
opcache.fast_shutdown=1
opcache.save_comments=1
opcache.load_comments=1
opcache.blacklist_filename=/etc/php.d/opcache*.blacklist
opcache.preload_user=root
opcache.preload=/home/bitrix/ext_www/site/preloader.php
Перезапустите httpd
сервис командой
service httpd restart
И запомните ее - она потребуется для применения изменений в предзагруженных классах
Если вы сделали все правильно, то увидить, что предзагрузка работает можно с помощю команды:
print_r(opcache_get_status()['preload_statistics'])
Она выведет массив всех файлов и классов, которые были предзагружены
Комментарии