将多个图像调整操作委派给Laravel作业不会加快上传过程



在将图像上传到我们的平台上时,我一直在尝试优化UX或管理员。这些图像相当重(7-10MB),一次分别在3批次上载(使用FineUploader)。每个图像都使用干预图像以多种尺寸存储。

原始逻辑

<?php
    $file = $request->file('qqfile'); // A big JPG file in the request
    $image = Image::make($file); // Building an Intervention Image object
    $sizes = array(2560, 1980, 1366, 1024, 768, 480, 320);
    foreach ($sizes as $size) {
        $image = $image->widen($size->width);
        Storage::put('public/image_'.$size.'.jpg', $image->encode('jpg', 90));
        // image_2560.jpg, image_1980.jpg, etc.
    }

我们当前的服务器是一个小的Digitalocean液滴(512MB RAM,1 VCPU)。考虑到所有因素,上传过程非常耗时(例如,上载了3张图像约2分钟)。

优化版本

为了加快管理员的速度,我决定在上传请求期间仅存储最大尺寸

<?php
    $file = $request->file('qqfile'); // A big JPG file in the request
    $image = Image::make($file); // Building an Intervention Image object
    $sizes = array(2560, 1980, 1366, 1024, 768, 480, 320);
    foreach ($sizes as $size) {
        if ($size == 2560) {
            // Store the biggest size: image_2560.jpg
            $image = $image->widen($size->width);
            Storage::put('public/image_'.$size.'.jpg', $image->encode('jpg', 90));
        } else {
            // Delegate the job to store a resized image, 15 minutes from now
            ProcessImageStoring::dispatch($size)->delay(Carbon::now()->addMinutes(15));
        }
    }

ProcessImageStoring作业工作正常。它找到已经存储的 2560px 图像并使用它来存储调整大小的版本。

问题是 - 即使工作延迟了15分钟,上传过程根本没有更快的速度。我不明白为什么。单个上传请求需要调整大小和存储 1映像,而不是7 ,应在15分钟内处理其他6个。

有什么想法吗?一般来说,这可能只是液滴的力量吗?任何可能限制性能的PHP/NGINX设置?

首先确保您真正使用Redis作为队列驱动程序。确保您将其设置在.env中,请确保未在配置文件中缓存它(运行php artisan config:clearphp artisan config:cache)。另外,如果您的队列工人正在运行,请确保已重新启动。

如果不是这样,则应确保上传多少时间以及图像调整大小的时间。您确定上传不需要13分钟,只需调整2分钟吗?

最新更新