5. Режимы обработки

Плагин создаёт копии картинок не мгновенно: на это нужно время и ресурсы сервера. Режим обработки отвечает на вопрос «кто и когда создаёт копии». Режим выбирается для каждой витрины отдельно: «Настройки» → «Производительность» → «Режим обработки».

Переключатель режима обработки

Три режима

«При просмотре» (On-demand)

Копии создаются прямо во время просмотра страницы посетителем — но в пределах бюджета (см. ниже). Что не уместилось, остаётся в очереди и дорабатывается при следующих просмотрах; посетитель пока видит оригинал.

  • Cron не нужен, работает на любом хостинге.
  • Минус: часть работы выполняется в запросе посетителя. Первые посетители новых страниц могут чуть дольше ждать.

«Фоновый» (Background)

Просмотр страницы только ставит страницу в очередь, ничего не создаёт. Копии создаёт консольная команда, которую запускает cron по вашему расписанию.

  • Запросы посетителей свободны от тяжёлой работы.
  • Без cron или ручного запуска команды копии не создаются вообще — на странице настроек в этом случае показано красное предупреждение.

Smart Hybrid

Комбинация. Просмотр страницы ставит страницу в очередь и учитывает визит. Команда по cron создаёт копии, самые посещаемые страницы первыми. Пока команда не работает (нет завершённого запуска 15 минут), копии своей страницы создаёт сам запрос посетителя в пределах бюджета — как в режиме «При просмотре».

  • Рекомендуется, если есть cron.
  • Без cron ведёт себя как «При просмотре».
  • Если сервер перегружен, закончилось место на диске или обработка поставлена на паузу, запрос посетителя ничего не создаёт (чтобы не усугублять).
При просмотре Фоновый Smart Hybrid
Нужен cron нет да желателен
Что делает просмотр страницы ставит в очередь и создаёт копии в пределах бюджета только ставит в очередь ставит в очередь, учитывает визит; создаёт копии сам, только пока фон не работает
Кто создаёт копии запрос посетителя команда по cron команда по cron (популярные страницы первыми), при отсутствии cron — запрос посетителя
Что будет без cron работает копии не создаются работает как «При просмотре»
Сервер перегружен или пауза защищает бюджет запроса ничего не создаётся запрос посетителя ничего не создаёт
Для кого хостинг без cron и SSH сервер, где запросы посетителей должны быть свободны от обработки картинок сервер с cron

Какой магазин — какой режим

Ваш магазин Режим Почему
Небольшой каталог, дешёвый хостинг, нет cron и SSH При просмотре Единственный режим, который работает без cron
Небольшой или средний каталог, cron есть Smart Hybrid Популярные страницы обрабатываются первыми, отказ cron не оставляет витрину без копий
Много картинок (тысячи и больше), слабый сервер, важно, чтобы посетители не ждали Smart Hybrid или Фоновый, плюс паузы и пониженный порог нагрузки Тяжёлая работа уходит из запросов посетителей
Облачное хранилище S3 или очень крупные картинки Фоновый (или Smart Hybrid) Кодирование в запросах посетителей нежелательно
Важно, чтобы без cron картинки всё равно появлялись При просмотре или Smart Hybrid В «Фоновом» без cron копий не будет
Хотите только попробовать Оставьте как есть После обновления с 3.3.0 — «При просмотре», на новой установке — Smart Hybrid

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

Что выбрано после установки и обновления

  • Новая установка (у витрины ещё нет сохранённых настроек): Smart Hybrid. Без cron он работает как «При просмотре», сам по себе ничего не запускается.
  • Обновление с 3.3.0 (настройки уже были сохранены): «При просмотре», как раньше. Обновление ничего не включает. Если у вас есть cron, выберите Smart Hybrid вручную.

Бюджет на запрос посетителя

Когда копии создаются в запросе посетителя (режимы «При просмотре» и Smart Hybrid без фона), плагин укладывается в бюджет, чтобы страница не «зависала»:

Поле По умолчанию Смысл
Бюджет времени на запрос посетителя 10 с Проверяется перед каждой картинкой. 0 — действует только «Максимальное время выполнения задачи»
Изображений на запрос посетителя 10 Сколько исходных картинок обработать за один просмотр. 0 — без ограничения
Макс. размер исходника при просмотре 0 (без отдельного лимита) Картинки больше этого размера (в мегапикселях) в запросе посетителя не обрабатываются

Картинки, которые не помещаются в память PHP, откладываются всегда, независимо от этих полей. Бюджет выше не должен превышать таймауты веб-сервера (fastcgi_read_timeout, request_terminate_timeout).

Эти три поля скрыты, когда выбран режим «Фоновый»: в нём посетитель ничего не создаёт.

Настройка cron

Плагин не создаёт cron сам. Расписание задаёте вы. Строка уже подготовлена на странице настроек (блок «Фоновая обработка», текст «Строка cron (каждую минуту)»): она подставляет правильный путь к вашему сайту. Скопируйте её оттуда:

Блок «Фоновая обработка» с готовой строкой cron

Строка выглядит так (путь у вас свой):

* * * * * php /путь/к/сайту/cli.php shop responsiveimagesPluginBackground run > /dev/null 2>&1

Что она означает: каждую минуту запускать команду фоновой обработки; её вывод не нужен.

Важные правила

  1. Запускайте от пользователя веб-сервера — владельца папки wa-data (например, www-data: crontab -u www-data -e). Иначе созданные файлы сайт не сможет прочитать или заменить.
  2. Версия PHP в командной строке должна быть 8.2–8.5. Она может отличаться от версии сайта. На хостингах часто нужно указать полный путь, например /usr/local/bin/php или /usr/bin/php8.3, вместо просто php. Какой путь верный, подскажет хостинг.
  3. Достаточно раза в минуту. Один запуск работает до 50 секунд и обрабатывает до 100 картинок.
  4. Режим «Фоновый» или Smart Hybrid выберите в настройках и сохраните; иначе команда не найдёт витрин с включённой фоновой обработкой (в выводе будет no_routes).

В панели хостинга

В панелях хостинга (ISPmanager, cPanel, Plesk, панели Beget, Timeweb и других) раздел называется по-разному: «Планировщик заданий», «Cron», «Задачи по расписанию». Общий порядок везде одинаков:

  1. Откройте раздел планировщика задач вашего хостинга. Если его нет, спросите поддержку: «Можно ли запускать php-скрипт по cron раз в минуту?» (на некоторых тарифах минимальный интервал больше — тогда выбирайте минимально возможный, например 5 минут).
  2. Создайте задачу с периодичностью «каждую минуту» (или минимальной доступной).
  3. В поле команды вставьте строку из настроек без пяти звёздочек в начале, если панель отдельно спрашивает расписание: php /путь/к/сайту/cli.php shop responsiveimagesPluginBackground run.
  4. Если панель разрешает выбрать пользователя или версию PHP, выберите пользователя сайта и PHP 8.2–8.5.
  5. Сохраните задачу. Через пару минут откройте вкладку «Диагностика»: должно появиться «Фоновая команда работает» и время последнего запуска.

Этот порядок общий; точный вид экранов зависит от вашего хостинга.

Если cron нет (общий хостинг)

Ту же команду можно запускать вручную по SSH, пока очередь не опустеет:

php /путь/к/сайту/cli.php shop responsiveimagesPluginBackground run
php /путь/к/сайту/cli.php shop responsiveimagesPluginBackground status

За один запуск команда обрабатывает до 100 картинок за 50 секунд. Без cron и без SSH используйте режим «При просмотре».

Команды

Все команды запускаются в консоли от пользователя веб-сервера в виде php /путь/к/сайту/cli.php shop responsiveimagesPluginBackground <команда>:

Команда Что делает
run Один прогон обработки (это и есть строка для cron). Команда по умолчанию
status Показывает режимы витрин, очередь, последний запуск, нагрузку, свободное место и строку для cron
pause Ставит фоновую обработку на паузу для всех витрин. Запущенный прогон доделывает текущую картинку и останавливается
resume Снимает паузу
retry-quarantined Возвращает в очередь картинки из карантина
repair-schema Достраивает таблицу очереди после обновления (если была большая очередь)
sweep Удаляет старые версии файлов, срок хранения которых вышел (раздел 9)
warmup --top 100 Возвращает в очередь самые посещаемые страницы, картинки которых не готовы. Каталог целиком не обходит

Пример вывода status (значения условные):

paused (global): no
runners running now: 0
storefronts:
  <хеш витрины>: background on, on_demand hybrid, mode hybrid, visitor queues only
claim columns (update 15): yes
tasks: 0 (processing 0, backoff 0, quarantine only 0)
images: 0 (due 0, of them deferred by on-demand 0; backoff 0; quarantined 0)
load (1 min): 0.41 on 12 cores = 0.03 per core (a run is refused above --max-load, default 0.7 ...)
last run: 2026-11-10 13:07:52
free disk: 901108 MB
cron (as the web server user): * * * * * php /путь/к/сайту/cli.php shop responsiveimagesPluginBackground run > /dev/null 2>&1

Параметры команды run

Параметры дописываются в конец строки; значение — следующим словом через пробел (например, --max-load 1.5).

Параметр По умолчанию Смысл
--max-time 50 Сколько секунд работает один прогон
--max-images 100 Сколько картинок за прогон
--max-tasks 50 Сколько страниц за прогон
--memory-limit 512M Предел памяти прогона. Достигнут — прогон останавливается, следующий продолжит
--min-free-disk 200 Минимум свободного места на диске, МБ
--max-load 0.7 Порог нагрузки сервера (см. ниже). 0 — не проверять
--sleep пауза витрины Пауза между картинками в секундах
--concurrency 1 Сколько процессов обработки одновременно (не более 4). Повышайте только на заметно свободном сервере
--external-budget 60 Сколько секунд на внешние вызовы (например, GigaChat) на одну картинку

Защита от перегрузки

Фоновая команда не должна «положить» сайт. У неё есть защита:

  • Нагрузка сервера. Команда не стартует и останавливается между картинками, пока нагрузка сервера (load average за минуту на ядро) выше --max-load (по умолчанию 0,7). Нагрузка самих процессов команды не учитывается. Чтобы выключить проверку, добавьте --max-load 0; чтобы разрешить работать на более занятом сервере — например, --max-load 1.5. Если число ядер определить нельзя (контейнеры, ограничения хостинга), проверка пропускается.
  • Место на диске. Нет --min-free-disk (200 МБ) — прогон не стартует.
  • Память. Достигнут --memory-limit — прогон останавливается.
  • Карантин. Картинка, которую не удалось обработать 3 раза, откладывается на 24 часа и затем обрабатывается снова. Вернуть сразу — ссылка «Повторить изображения из карантина» в настройках, команда retry-quarantined или сохранение настроек. Если после трёх таких кругов картинка так и не обрабатывается, она убирается из очереди (запись остаётся в журнале и во вкладке «Диагностика»).
  • Проверка нагрузки в запросах посетителей — отдельная настройка «Включить проверку нагрузки на сервер» (справочник).
  • Пауза. Переключатель «Приостановить фоновую обработку для этой витрины (очередь сохраняется)» — для одной витрины; команда pause — для всех.

На странице настроек и во вкладке «Диагностика» показана причина последнего отказа: нагрузка (load), диск (disk), пауза (paused), память (memory), незавершённое обновление таблицы очереди (schema).

Как включить фон по шагам (рекомендация)

  1. Начните с одной витрины: режим Smart Hybrid, «Сохранить».
  2. Добавьте cron. Если магазин большой (сотни тысяч картинок), сначала запускайте вручную маленькими порциями и смотрите нагрузку:
    php /путь/к/сайту/cli.php shop responsiveimagesPluginBackground run --max-images 20 --max-time 20
    php /путь/к/сайту/cli.php shop responsiveimagesPluginBackground status
  3. Следите за нагрузкой процессора и памяти сервера, временем ответа витрины и вкладкой «Диагностика». Если нагрузка выросла — pause или вернитесь на «При просмотре».
  4. Старые версии файлов удаляются в конце фонового запуска. Без cron вызывайте sweep вручную.

Осторожные ориентиры: --concurrency 1 подходит почти всем; 2 — если сервер заметно свободен; 4 — максимум, только при свободных ядрах. Значения порогов проверены на лабораторном стенде, но не на вашем сервере — наблюдайте за нагрузкой.

Как выключить фон

Выберите режим «При просмотре» и нажмите «Сохранить», затем удалите строку из cron. Очередь и созданные файлы сохраняются.

Ручной запуск

Разовый запуск без cron — команда run по SSH (см. выше). Из браузера фоновую команду запустить нельзя: это сделано намеренно.

Приоритет по посещаемости (Smart Hybrid)

В режиме Smart Hybrid браузер посетителя один раз за сессию сообщает серверу о странице с необработанными картинками. Страницы с большим числом визитов обрабатываются раньше; половина задач прогона (не больше 25) берётся по числу визитов, остальные по порядку очереди — чтобы старые задачи не «голодали». Счётчик раз в сутки уменьшается вдвое. Роботы без JavaScript не учитываются. Для учёта визитов плагин ставит посетителю сессионную cookie ri_dm (см. Безопасность).

Страница, которую никто не открывал 30 дней, удаляется из очереди (срок не настраивается); при новом открытии она ставится в очередь заново.

Просмотр изображения
Оригинал