Оптимизация картинок на сервере.

GooglePageSpeed — требует уменьшения размер картинок, притом достаточно настойчиво.
Так же это действительно помогает снизить нагрузку на сайт и у увеличить скорость его загрузки.

Для этого нам понадобится  две утилиты jpegoptim  - она будет оптимизировать jpg ну и png  займется optipng

Для начала установим их

 sudo apt-get install jpegoptim optipng -y 

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

 find /home/bitrix/ext_www/shop.wildorchid.ru/ -regex ".*\.\(jpg\|jpeg\|gif\|png\|JPG\|JPEG\|GIF\|PNG\)" -print0 | xargs -0 cp --parents --target-directory ./tmp/backup

Теперь нам остается только сжать картинки до приемлемого качества.

find /home/bitrix/ext_www/shop.wildorchid.ru/{upload/resize_cache,upload/iblock/,local}/ -type f -regex ".*\(jpg\|jpeg\|JPG\|JPEG\)" -exec jpegoptim --preserve --preserve-perms --max=85 {} \;

—max=85 — качество изображения, ступени по 5

В find нет флага регистронезависимости а по этому в примере не все варианты написания Jpg, если же вам нужно действительно все варианты написания от Jpeg до jPg включая наличие и отсутствие «e», то можно сделать так:

... -regex "^.*[j|J][p|P]\(e\|E\|\)[g|G]$"

И вариант jpg+png

 -regex ".*\([j|J][p|P]\(e\|E\|\)[g|G]\|\([p|p][n|N][g|G]\)\)"

Или так если вешать на крон

find /home/bitrix/ext_www/shop.wildorchid.ru/{upload/resize_cache,upload/iblock/,local}/ -type f -regex ".*\(jpg\|jpeg\|JPG\|JPEG\)" -exec jpegoptim --preserve --preserve-perms --max=85 {} \;  > /dev/null 2>&1 

А вот PNG могу обжимаются куда как дольше а главное если вы до сих пор не используете SVG (что странно), то прозрачные PNG в элементах оформления могут немного «замылиться» .По этому мы по умолчанию сохраняем рядом исходный файл.

find /home/bitrix/ext_www/shop.wildorchid.ru/{upload/resize_cache,upload/iblock/,local}/ -type f -regex ".*\(png\|PNG\)" -print -exec optipng -o5 -quiet -keep -preserve {} \;

Для того чтоб проверить что у нас получилось, я взял верстку одного из проектов и прогнал всю папку верстки с изменением в 5 пунктов от 70% до 100. Так же я не буду показывать все картинки на сайте, поскольку динамика была на лицо. Да и отобразить их на сайте в размере 100% оказалось трудно. Заострю внимание лишь на явных изменениях при использование 100% 85% и 70%

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

Исходные данные 100% качество, не обжатые изображения:

...

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

Посмотрим что у нас получилось:

Разница между 85 и 75%

Давайте посмотрим как изменилась скорость загрузки страницы после конвертации всех изображений, запускаем сессии в режиме инкогнито без кеширования, первый хит.

Реальный контент, единственное на что стоит обратить внимание, так это верстка совсем сырая и картинки не 1:1 ужаты средствами html а следовательно для более качественного сравнение открыть их нужно в 100% размере, однако не стал переделывать, поскольку программно сжатые картинки тоже встречаются и достаточно часто.

Пример верстки 70%   Пример верстки 75%   Пример верстки 80%  
Пример верстки 85%   Пример верстки 90%   Исходное качество  100%

Итог:

85% Отличное соотношение цена-качество, уменьшение размера картинок более чем на 100%, уменьшение скорости загрузки сайта несколько раз!
При этом потеря качества настолько не очевидна, что даже для притязательного зрителя остается в приделах нормы. Идеальный вариант, мы уже уменьшаем размер контента, притом значительно но все еще уверены в качестве. При 80% соотношение размера еще лучше, но артефакты уже начинают появляться.

75% Собственно тут бы оно казалось золотая середина, но нет, артефакты уже явно заметны и на контенте хорошего качества будут видны, что не дает нам прогонять любой сайт с полной уверенностью через оптимизатор.
А вот размер относительно 85% уменьшается незначительно, что конечно даст нам протиста скорости но убавит уверенности что эти действия останутся незаметны на сайте.

70% Уже явно выражены артефакты на сложном контенте, далее я покажу что на большинстве картинок их все-же не заметно но факт того что за контентом нужно будет следить уже остается. А мы собирались прогнать весь сайт сразу, в таком же случае нам придется обходить самые вкусные баннеры.
Данный режим хоть и дал лучшую производительность и объем данных, но цена качество оказался не лучшим. Оy идеально подойдет к не требовательным к качеству контента сайтам, шин монтаж, юристы и тд.

А ведь мы еще не затронули такую тему как exif , ведь удалив мета данные можно тоже немного выжать из размера, да и тот же googlepagespeed его рекомендует удалять.
Дя тек же кто не рискнул пережать весь сайт, можно с легкостью сжимать только resize_cache, вот уж его то точно можно обжимать сколько вам вздумается. Да и вообще закинуть задачу на cron

Если вам нужно обжать картинки выше определенного разрешения, то это можно сделать так ( утилита входит в состав ImageMagick)

find * -iname '*.jpg' -print0 | xargs -0 mogrify -resize 800x800\> -monitor -format jpg

где \> это именно больше

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