Перейти к содержимому


Фотография
* * * * * 1 Голосов

Рекомендации к ресайзеру картинок

рецепт картинки ресайз resize кеш кеширование оптимизация оптимизация ускорение ускорение хак

Сообщений в теме: 6

#1 SmetDenis

SmetDenis

Отправлено 08 December 2014 - 11:07

*
Популярное сообщение!

На днях, в ходе аудита скорости одного из сайтов мне встретился один важный нюанс ресайзера картинок Zoo.
 
Основная его проблема в том, что он сохраняет все миниатюры в одну папку. Это не так страшно, пока у вас их не станет несколько тысяч.
 
Есть неприятная особенность многих файловых систем (и linux и тем более windows)
Если мы обратимся к любому файлу, который лежит в папке, где бок-о-бок лежит несколько тысяч других, то это будет медленнее, чем обычно. 
 
На некоторых типах FS сама директория будет открываться очень медленно.
 
ВНИМАНИЕ! Я имею ввиду вообще любое взаимодействие с файлами, будь то программные чтения/записи так и отдача картинку в браузер и тем более, если просто зайти в папку.
 
-----------
Решается это довольно просто.
 
В файле administrator\components\com_zoo\helpers\zoo.php находим resizeImage() и меняем строки
dpyi_200x0.png
 
на следующее
if (1) { // 0 - чтобы использовать старый вариант
    $path        = md5($file . $width . $height);
    $subfolder   = substr($path, 0, 2);
    $cacheFolder = '/cache/com_zoo/images/'; // относительный путь для миниатюр
    $thumbfile   = JPath::clean(JPATH_ROOT . "{$cacheFolder}/{$subfolder}/{$path}." . $file_info['extension']);
} else {
    $thumbfile = $this->app->path->path('cache:') . '/images/' . $file_info['filename'] . '_' . md5($file . $width . $height) . '.' . $file_info['extension'];
}
  
$cache_time = 86400 * 365; // 365 суток, вместо 24-х часов. Нет смысла генерировать каждый раз одно и тоже
 
В итоге
-- Теперь картинки будут создаваться во вложенных директориях и мы избегаем некоторых тормозов FS
-- $cacheFolder можно подстроить под себя и вынести например в '/cache_images/'. Т.о. вы при чистке кеша Joomla миниатюры не пострадают и не придется их генерировать снова.
-- Миниатюра будет создана заново только по прошествии года. Считаю, что нет смысла генерировать их раз в сутки и получить один и тот же результат. Это пустая трата ресурсов...
 
Рекомендую в дополнение
-- Проверьте опцию realpath_cache_size в php.ini Он должна быть в районе 4мб, минимум 512кб. Отвечает за любые манипуляциями с файлами через PHP
-- Если есть возможность, то отключите open_basedir Опция заставляет проверять любой файл на сайте, что он находится в определенной папке. А по факту сильно тормозит сайт.
-- Стоит рассмотреть перенос папки кеша в RAM диск

Стоит понимать
-- У вас изменятся пути на сайте, поэтому ПС может выкинуть картинки из поиска по картинкам.
-- Если картинки часто меняются, то $cache_time лучше не трогать.
-- Не стоит ждать бешенного всплеска производительности. Это не то самое узкое место любого сайта.
  • 9
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#2 andrey.koch

andrey.koch

Отправлено 08 December 2014 - 14:27

От бы эту фишку в самостоятельный JBZoo  :)

 

P.S. Спасибо Денис, у себя применил.


Сообщение отредактировал ankoch: 08 December 2014 - 14:29

  • 0

#3 SmetDenis

SmetDenis

Отправлено 08 December 2014 - 14:44

От бы эту фишку в самостоятельный JBZoo  :)


Пока только хаком или ждать 3.0 т.к helpers\zoo.php загружается раньше нашего кода и потом его не перебить на свой.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#4 all4time

all4time

Отправлено 10 December 2014 - 13:14

Если не трудно, выложите измененный zoo.php, замена помеченных двух строк на приведенный код дает ошибку:

 

Parse error: syntax error, unexpected '$subfolder  ' (T_VARIABLE) in .../administrator/components/com_zoo/helpers/zoo.php on line 133


  • 0

#5 isay777

isay777

Отправлено 11 December 2014 - 19:22

Денис... По моему что-то не так. У меня в папке картинок создалось 251 папок, создание которых еще более затормозило сайт. 


Некоторые картинки исчезли 

dkpwq09ovpqb.png


Сообщение отредактировал isay777: 11 December 2014 - 19:18

  • 0
ХОСТИНГ для сайтов jbzoo (все попугаи)

#6 SmetDenis

SmetDenis

Отправлено 11 December 2014 - 20:56

Parse error: syntax error, unexpected '$subfolder  ' (T_VARIABLE) in .../administrator/components/com_zoo/helpers/zoo.php on line 133
 

Похоже, что у вас среди пробелов в коде невидимый символ, который ломает синтаксис. Перепечатайте пробелы вручную.

И проверьте синтаксис.

 

Денис... По моему что-то не так. У меня в папке картинок создалось 251 папок, создание которых еще более затормозило сайт. 
 

250 - это не страшно, там 2 символа - это жесткое ограничение на количество.

Тормозить будет только при первом ресайзе, но точно не от папок.

 

Проверьте куда ссылаются картинки, которые не загрузились. Убедитесь был вычищен кеш чист и доступен на запись.


  • 1
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#7 CB9TOIIIA

CB9TOIIIA

Отправлено 29 December 2014 - 17:01

Добавил в: http://forum.jbzoo.c...zku-na-bd-i-fs/


  • 1





Темы с аналогичным тегами рецепт, картинки, ресайз, resize, кеш, кеширование, оптимизация, оптимизация ускорение, ускорение, хак

Click to return to top of page in style!