Приветствую.
Клавдия хочет предложить небольшую оптимизацию хука генерации превью в теме Unitheme2 (app/addons/abt__unitheme2/func.php).
Даже прям настаивает. говорит несколько раз перепроверила.
Гооврит уууххх как все ускорится, т.к. непрозрачных изображений 99% обычно.
Суть
Хук fn_abt__unitheme2_generate_thumbnail_post нужен для пересоздания превью прозрачных изображений (чтобы сохранить альфа-канал). Однако сейчас он первой же строкой вызывает fn_get_image_size() (а внутри — finfo_file(), чтение файла оригинала) для каждого изображения, и лишь затем проверяет флаг прозрачности:
function fn_abt__unitheme2_generate_thumbnail_post($th_filename,$lazy,$image_path,$width,$height,$image){
list(,,,$tmp_path) = fn_get_image_size(Storage::instance('images')->getAbsolutePath($image_path));
if (!empty($tmp_path) && (
(!empty($image['transparent']) && $image['transparent'] == YesNo::YES)
|| (!empty($image['icon']['transparent']) && $image['icon']['transparent'] == YesNo::YES)
)) {
// пересоздание превью — только для прозрачных
}
}
Поскольку признак прозрачности уже доступен в $image['transparent'] (поле transparent в cscart_images), чтение файла для непрозрачных изображений можно не выполнять.
Это особенно заметно при включённом lazy_thumbnails: ядро в этом режиме намеренно откладывает работу с файлами, но хук вызывается всегда и читает оригинал на каждое изображение.
Предложение — проверять флаг прозрачности до чтения файла:
function fn_abt__unitheme2_generate_thumbnail_post($th_filename,$lazy,$image_path,$width,$height,$image){
if (
(empty($image['transparent']) || $image['transparent'] != YesNo::YES)
&& (empty($image['icon']['transparent']) || $image['icon']['transparent'] != YesNo::YES)
) {
return;
}
list(,,,$tmp_path) = fn_get_image_size(Storage::instance('images')->getAbsolutePath($image_path));
if (!empty($tmp_path)) {
// оригинальная логика пересоздания превью для прозрачных
}
}
Логика для прозрачных изображений не меняется, а для остальных пропускается лишнее чтение файла.
Просьба рассмотреть возможность включить такую проверку в тему. Спасибо!