Opcache preloader в php 7.4 на BitrixVM
Rus
Eng
Opcache preloader в php 7.4 на BitrixVM

Прелоад файлов и классов с помощью 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'])

Она выведет массив всех файлов и классов, которые были предзагружены

Ответить
Отменить

Комментарии

Валерий
Валерий
|Ответить
А профит замеряли? И пробовали из ядра битрикса что-то предзагрузить?
Александр
Александр
|Ответить
Нет, не пришлось. Ставил на несколько проектов, по желанию заказчика, но точные замеры скорости не проводил. Самому интересно

Оставьте комментарий

На сайте используется система премодерирования комментариев, поэтому ваше сообщение будет опубликовано лишь после одобрения модератором

Вы отвечаете на комментарий пользователя

Отправить

ОБРАТНАЯ СВЯЗЬ

Напишите мне

Вы разрабатываете новый сервис, вносите доработки в существующий и хотите лучше чем у конкурентов? Вы обратились по адресу. Предлагаю вам комплексную разработку сайтов студийного уровня. У меня вы можете заказать дизайн, верстку, програмированние, разработку нетрадиционного функционала, реализацию связи между CMS, CRM и Data Analitics, а так же все остальное касаемое сайтов, кроме продвижения.

Обращайтесь, я всегда проконсультирую по всем вопросам и помогу подобрать наиболее эффективное решение для Вашего бизнеса. Я занимаюсь созданием сайтов в Новосибирске и в других регионах России, также работаю со странами СНГ. Вы останетесь довольны нашим сотрудничеством

Во время отправки произошла ошибка, пожалуйста попробуйте еще раз через некоторое время
Сообщение отправлено успешно

Телефоны

+7(993) 007-18-96

Email

info@tichiy.ru

Адрес

Россия, г. Москва

Отправляя форму Вы автоматически подтверждаете, что ознакомились и принимаете Политику конфиденциальности сайта

Написать мне
Отправить
Отправляя форму Вы автоматически подтверждаете, что ознакомились и принимаете Политику конфиденциальности сайта
Отправка успешна!
Thank you for your feedback. I will answer you within the next working hours
Отправка не удалась
Во время отправки запроса произошла ошибка. Пожалуйста, подождите и попробуйте снова через некоторое время или свяжитесь со мной