Почему миниатюры изображений WordPress могут занимать много места на сервере и как это исправить

matreshki-in-row-wordpress

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

При этом WordPress не только сам создает миниатюры изображений различного размера по-умолчанию, но также позволяет делать это плагинам и темам оформления сайта для собственных нужд, предоставляя соответствующие функцию из своего API, которыми очень охотно пользуются разработчики тем и плагинов, увы, часто без оглядки друг на друга. Подобная свобода, как показывает практика, может приводить к очень серьезному и неоправданному перерасходу ресурсов на хостинге, если этой особенности вовремя не уделить отдельное внимание, как раз об этом и будет история ниже.

Решили однажды на сайте одной компании, сделанном на WordPress, отказаться от использования галерей для показа изделий и воспользоваться плагином электронного магазина WooCommerce, дающим более гибкие возможности для управления представлением предлагаемых изделий и их характеристик. Попутно обновили базовую коммерческую тему, используемую в качестве родительской для темы-наследника,  определяющей вид сайта. Обновление и смена функционала прошли успешно,  владелец сайта начал наполнять его товарами, однако очень быстро работа встала — обнаружилось почти полное исчерпание свободного места на сервере.

Что же произошло? Ответ был найден быстро, достаточно оказалось заглянуть в каталог uploads — место на диске было съедено миниатюрами изображений, вариантов которых оказалось гораздо больше, чем можно было предположить изначально. Оставалось понять, почему так случилось и как исправить ситуацию.

Как можно узнать, сколько и какие миниатюры создает сайт на WordPress в отдельно взятом конкретном случае?

Для этого существуют разные способы и один из них — поиск использования функции add_image_size(…) в исходниках темы и всех плагинов, однако вряд ли этот метод всем покажется удобным.

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

Предлагаю взглянуть на скриншот списка миниатюр, создававшихся на упомянутом выше сайте на момент обнаружения проблемы, он впечатляет и может повергнуть в ужас, особенно, если обратить внимание на размеры отдельных «миниатюр» — целых 20 штук для каждого загружаемого изображения, если оно превышает размер миниатюры!

Список создаваемых миниатюр изображений сайта на WordPress до его оптимизации

Список создаваемых миниатюр изображений сайта на WordPress до его оптимизации.

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

В уместности наличия некоторых других миниатюр изображений и их размеров также появились вопросы: например, зачем генерировать «большое» изображение 1024 x 1024, если на сайте уже установлен замечательный плагин Resize Image After Upload, уменьшающий все оригиналы загружаемых изображений до настраиваемого размера 1200 x 1200 (конечно, только если они его превышают). К слову сказать, если на сайте установлен плагин WP Smush, установка Resize Image After Upload уже не обязательна — даже в бесплатной версии Смаша есть опция уменьшения размера оригиналов загружаемых картинок.

Для решения проблем с «не отключаемыми» миниатюрами пришлось написать небольшой скрип, отменяющий в нужный момент времени (в хуке after_setup_theme) «заявку» на создание миниатюр, «поданную» скриптами родительской темы сайта. Скрип был добавлен в файл functions.php дочерней темы, разумеется, ниже его исходник, где вместо mythemename можно вписать название собственной темы:

/*
 * Отключаем генерацию ненужных миниатюр
 */
function mythemename_remove_some_tn() {
	// Миниатюры для портфолио
	remove_image_size( 'portfolio-full' );
	remove_image_size( 'portfolio-one' );
	remove_image_size( 'portfolio-two' );
	remove_image_size( 'portfolio-three' );
	remove_image_size( 'portfolio-five' );
	remove_image_size( 'recent-works-thumbnail' );

	// Миниатюры для сеточного расположения элементов
	remove_image_size( '200' );
	remove_image_size( '400' );
	remove_image_size( '600' );
	remove_image_size( '800' );
	remove_image_size( '1200' );
}
add_action( 'after_setup_theme', 'mythemename_remove_some_tn', 99);

После этой нехитрой меры список создаваемых миниатюр значительно сократился, о чем не замедлил сообщить WP Smush:

Список создаваемых миниатюр изображений сайта на WordPress после его оптимизации

Список создаваемых миниатюр изображений сайта на WordPress уже после оптимизации и оставления только необходимых.

Размеры medium и large были обнулены из консоли панели управления WordPress (НастройкиМедиафайлы) и удалось точнее подобрать размеры миниатюр для изображений товаров магазина через админку WooCommerce.

А что же делать с ранее созданными не нужными миниатюрами?

Избавиться от них можно в два этапа, используя еще одну пару полезных плагинов:

  • Thumbnail Cleaner (позволяет удалить все миниатюры, сохранив при этом оригиналы изображений)
  • Regenerate Thumbnails (создает новые миниатюры «согласно поданным заявкам» движка WordPress, его активных тем и плагинов)

При их использовании нужно помнить, однако, что они могут создать ощутимую нагрузку на веб-сервер, поэтому подобные операции лучше проводить в периоды наименьшей посещаемости сайтов и соответственно загруженности сервера, например, в ранние утренние часы. Также следует иметь ввиду, что работа плагина Regenerate Thumbnails может быть довольно долгой, если на сайте уже выложено много изображений.

По окончании всех манипуляций с миниатюрами полезно проверить сайт с помощью плагина Broken Link Checker чтобы убедиться в наличии всех миниатюр на своих местах — в момент их повторного создания возможна флуктуация в размерах картинки всего в 1 пиксель, однако это приведет к изменению имени файла и неработоспособности ссылки на него. Впрочем, плагин Broken Link Checker в любом случае полезно «держать под рукой» и запускать время от времени для выявления битых ссылок на сайте.

 

Метки:
Понравилась статья? Поделитесь ссылкой в соцсетях: