СТАРТОВОЕ ПРЕДЛОЖЕНИЕ — ОГРАНИЧЕНО Das Nest Lifetime 499 € 149 € Получить →
KakapoWP KakapoWP
Справочный центр/Performance/Запуск пакетной обработки по существующей библиотеке файлов

Запуск пакетной обработки по существующей библиотеке файлов

Относится к: Kakapo Performance· 5 мин чтения

Что делает прогон — и что должно быть включено заранее

Оба модуля изображений в Kakapo Performance работают в тот момент, когда WordPress создаёт размеры изображений: сжатие задаёт качество и удаляет маркеры EXIF, IPTC и XMP из созданных размеров, модуль форматов создаёт производные WebP и AVIF. Тем самым и то и другое действует со следующей загрузки. Для изображений, которые уже лежат в медиатеке, не происходит ничего — и именно этот пробел закрывает пакетный прогон.

Прогон не придумывает работу. К имеющимся файлам он применяет ровно то, что выше включено для новых загрузок: WebP и/или AVIF и «Удалить метаданные». Если ничего из этого не включено, кнопка запуска заблокирована и называет причину — например, что сервер не умеет записывать WebP или что попросту не активна ни одна настройка. Карточку «Обработать существующую медиатеку» найдёшь в разделе «Изображения» под настройками изображений; порядок в интерфейсе соответствует порядку работы: сначала настроить, затем прогнать по имеющимся файлам.

Затрагиваются исключительно вложения типа JPEG и PNG, которые не лежат в корзине. Строка «Изображений JPEG/PNG в наличии» называет тебе это число ещё до запуска.

Запустить, наблюдать, остановить

Клик по «Запустить пакетный прогон» создаёт прогон и сразу его начинает. Работа идёт проходами с бюджетом времени в 8 секунд; после этого проход отчитывается, показания обновляются, а следующий стартует через 200 миллисекунд. Если в конце прохода остаётся меньше 3,5 секунды, ни одно новое вложение уже не берётся в работу — внутри модуль форматов рассчитывает минимум три секунды на изображение. На серверах с заданным max_execution_time бюджет дополнительно ограничивается 80 процентами этого предела, чтобы проход не оборвался посреди запроса.

Полоса показывает настоящий прогресс: число обработанных вложений, делённое на общее число. Под ней стоят текущие числа — созданные и пропущенные производные, по одной строке для WebP и AVIF, плюс очищенные файлы и освобождённые байты. В самом низу бегут последние 14 строк протокола, каждая с именем файла и с тем, что с этим файлом получилось.

«Остановить» останавливает прогон. Кнопка после этого называется «Продолжить», и следующий запуск продолжает ровно с того вложения, на котором он встал. То же самое происходит, если ты просто закроешь вкладку: прогон останавливается, ничего не теряется. Если ты снова откроешь страницу, она запросит состояние и сама продолжит ещё не завершённый прогон.

Как прогон переживает обрыв

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

Две одновременно открытые страницы управления не могут помешать друг другу: блокировка всегда пропускает только один проход. Если проход убит веб-сервером и блокировка осталась висеть, через 180 секунд она считается осиротевшей и перехватывается.

При продолжении общее число определяется заново, а не замораживается — между остановкой и продолжением что-то могло быть загружено или удалено. Если ты посреди прогона выключишь все настройки изображений, он остановит себя сам, вместо того чтобы делать работу, которую больше никто не заказывал. «Сбросить» отменяет прогресс и отчёт; уже созданные файлы остаются лежать.

Как правильно читать отчёт

В конце стоит итоговая строка с измеренными размерами файлов — никаких оценок. Для каждой созданной производной прогон сравнивает размер исходника с размером результата, оба значения реальные, из момента создания. Считается только то, что возникло заново в этом прогоне; то, что было преобразовано уже при загрузке, второй раз не появляется.

Три вещи стоят там намеренно именно так, а не красивее: WebP и AVIF получают отдельные строки, потому что из одного и того же исходника производная создаётся дважды — общая сумма посчитала бы исходник дважды. Поэтому проценты действуют построчно и их нельзя складывать; браузер всегда забирает только один из двух форматов. И новые файлы дополнительно занимают место на диске: экономия возникает при передаче посетителю. Место на диске действительно освобождает только удаление метаданных, и эти байты стоят в отдельной строке.

Если ничего не создано, отчёт говорит и об этом: либо для всего объёма уже всё было сделано, либо ни один результат не оказался меньше своего исходника. Результат, который не меньше, отбрасывается и засчитывается как «пропущено» — никогда как выигрыш.

Если что-то пропускается

Каждая несозданная производная получает причину открытым текстом, и все причины собраны в итоговой строке:

• «не меньше исходника» — это нормально, исходник остаётся. • «слишком велико для доступной оперативной памяти» — модуль форматов проверяет размеры изображения до декодирования и отказывает, вместо того чтобы дать PHP упереться в предел памяти. • «в целевом месте уже лежал файл» — он не перезаписывается. Обычно так бывает, когда пометка у вложения потерялась, а файлы ещё лежат на месте. • «не читается» — повреждён, CMYK-JPEG или экзотический вариант. • «не записывается» — проверить права в папке uploads. • «формат на этом сервере недоступен» — AVIF требует PHP 8.1 или новее с libavif, WebP — библиотеку GD с libwebp.

Две вещи, которые часто принимают за ошибки, хотя они ими не являются: второй прогон почти не показывает движения, потому что сделанное не повторяется — отметка у вложения фиксирует, для скольких файлов удаление метаданных уже выполнено. И тот, кто меняет уровень качества, тем самым не обновляет уже созданный файл; для этого производные сначала пришлось бы убрать.

Эта статья оказалась полезной?