Opcache preloader в php 7.4 на BitrixVM
Rus
Eng
Opcache preloader в php 7.4 на BitrixVM
Решаю сложные технические задачи для Bitrix и 1С: от аудита чужого кода до настройки сложных интеграций с гарантией результата
Рекомендую

Хостинг для сайта

Если выбираете хостинг под проект — советую Timeweb. Современная инфраструктура, широкий выбор тарифов от стартовых до VPS под нагрузку, отзывчивая техподдержка, которая отвечает по существу, а не отписками. Я сам держу на нём часть своих проектов и рекомендую клиентам.

Перейти Партнёрская ссылка. Для вас цена не меняется.

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

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

Александр Тихий
Автор статьи

Александр Тихий

Fullstack-разработчик · 1С-Битрикс

Разрабатываю и развиваю интернет-магазины и корпоративные порталы на 1С-Битрикс. Интеграции с 1С, highload-нагрузки, безопасность по 152-ФЗ.


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

Комментарии

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

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

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

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

Отправить

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

Напишите мне

Напишите мне, чтобы обсудить задачу. Работаю удаленно, официально (самозанятый), стоимость часа — 1800 ₽, в день могу уделять проекту 3–4 часа. Отвечаю быстро, консультация бесплатная.

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

Телефоны

+7(993) 007-18-96

Email

info@tichiy.ru

Адрес

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

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