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

问题描述 投票:1回答:1

在我们的平台上上传图像时,我一直在尝试优化用户体验或管理员。图像相当重(7-10MB),并且一次一批地上传3个(使用FineUploader)。使用Intervention Image将每个图像存储为多种尺寸。

原始逻辑

<?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分钟)。

优化版

为了加快管理员的流程,我决定在上传请求期间只存储最大的大小,然后使用Laravel queues(Redis)委派其余大小的存储:

<?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个,其他6个应该在15分钟内处理。

有任何想法吗?难道它只是一般的液滴力量吗?任何可能限制性能的PHP / Nginx设置?

php laravel performance laravel-5 intervention
1个回答
1
投票

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

如果不是这种情况,您应该确保上传多少时间以及图像大小调整需要多长时间。您确定上传不需要13分钟,仅调整大小2分钟吗?

© www.soinside.com 2019 - 2024. All rights reserved.