Skip to content

Commit 066e31c

Browse files
committed
MC-42892: [Performance] Product image resize function onsave taking long time when saving product images in admin panel
1 parent 9728fe3 commit 066e31c

File tree

1 file changed

+28
-3
lines changed

1 file changed

+28
-3
lines changed

app/code/Magento/Catalog/Observer/ImageResizeAfterProductSave.php

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Magento\Framework\Event\ObserverInterface;
1111
use Magento\Framework\App\State;
1212
use Magento\MediaStorage\Service\ImageResize;
13+
use Magento\MediaStorage\Service\ImageResizeScheduler;
1314
use Magento\Catalog\Model\Config\CatalogMediaConfig;
1415

1516
/**
@@ -32,21 +33,37 @@ class ImageResizeAfterProductSave implements ObserverInterface
3233
*/
3334
private $catalogMediaConfig;
3435

36+
/**
37+
* @var ImageResizeScheduler
38+
*/
39+
private $imageResizeScheduler;
40+
41+
/**
42+
* @var bool
43+
*/
44+
private $imageResizeSchedulerFlag = false;
45+
3546
/**
3647
* Product constructor.
3748
*
3849
* @param ImageResize $imageResize
3950
* @param State $state
4051
* @param CatalogMediaConfig $catalogMediaConfig
52+
* @param ImageResizeScheduler $imageResizeScheduler
53+
* @param bool $imageResizeSchedulerFlag
4154
*/
4255
public function __construct(
4356
ImageResize $imageResize,
4457
State $state,
45-
CatalogMediaConfig $catalogMediaConfig
58+
CatalogMediaConfig $catalogMediaConfig,
59+
ImageResizeScheduler $imageResizeScheduler,
60+
bool $imageResizeSchedulerFlag = false
4661
) {
4762
$this->imageResize = $imageResize;
4863
$this->state = $state;
4964
$this->catalogMediaConfig = $catalogMediaConfig;
65+
$this->imageResizeScheduler = $imageResizeScheduler;
66+
$this->imageResizeSchedulerFlag = $imageResizeSchedulerFlag;
5067
}
5168

5269
/**
@@ -72,7 +89,11 @@ public function execute(\Magento\Framework\Event\Observer $observer)
7289

7390
if (!(bool) $product->getId()) {
7491
foreach ($product->getMediaGalleryImages() as $image) {
75-
$this->imageResize->resizeFromImageName($image->getFile());
92+
if ($this->imageResizeSchedulerFlag) {
93+
$this->imageResizeScheduler->schedule($image->getFile());
94+
} else {
95+
$this->imageResize->resizeFromImageName($image->getFile());
96+
}
7697
}
7798
} else {
7899
$new = $product->getData('media_gallery');
@@ -81,7 +102,11 @@ public function execute(\Magento\Framework\Event\Observer $observer)
81102
$mediaOriginalGallery = !empty($original['images']) ? array_column($original['images'], 'file') : [];
82103

83104
foreach (array_diff($mediaGallery, $mediaOriginalGallery) as $image) {
84-
$this->imageResize->resizeFromImageName($image);
105+
if ($this->imageResizeSchedulerFlag) {
106+
$this->imageResizeScheduler->schedule($image);
107+
} else {
108+
$this->imageResize->resizeFromImageName($image);
109+
}
85110
}
86111
}
87112
}

0 commit comments

Comments
 (0)