Jump to content


Photo
* * * * * 1 votes

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

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

6 replies to this topic

#1 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 08 December 2014 - 11:07

*
POPULAR

На днях, в ходе аудита скорости одного из сайтов мне встретился один важный нюанс ресайзера картинок 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
  • JBZoo User (rus)
  • User rate: 16.4
  • posts: 444
  • topics: 86

Posted 08 December 2014 - 14:27

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

 

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


Edited by ankoch, 08 December 2014 - 14:29.

  • 0

#3 SmetDenis

SmetDenis
  • Topic Starter
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 08 December 2014 - 14:44

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


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



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


#4 all4time

all4time
  • JBZoo User (rus)
  • User rate: 0.2
  • posts: 21
  • topics: 4

Posted 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
  • JBZoo User (rus)
  • User rate: 113.4
  • posts: 1878
  • topics: 232

Posted 11 December 2014 - 19:22

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


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

dkpwq09ovpqb.png


Edited by isay777, 11 December 2014 - 19:18.

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

#6 SmetDenis

SmetDenis
  • Topic Starter
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 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
  • Administrators
  • User rate: 230.6
  • posts: 3680
  • topics: 235

Posted 29 December 2014 - 17:01

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


  • 1





Also tagged with one or more of these keywords: рецепт, картинки, ресайз, resize, кеш, кеширование, оптимизация, оптимизация ускорение, ускорение, хак

Click to return to top of page in style!