我正在尝试制作图片库。为此,我将原始图像(现在大约为7000,将来将超过60.000)存储在存储laravel路径中。 接下来,我要做一份工作,将路径和元数据(图像大小,分辨率,mimetype,宽度和高度)存储到db。
问题在于它非常非常慢。
这是我的控制器:
public function startJob() {
// Start doing Jobs
CreateDirectories::withChain([
new RecordPaths,
// new OptimizeImage,
// new SendNotification,
])->dispatch()->delay(now()->addSeconds(3));
echo 'create directories and stored paths to database!';
}
在我的控制器中,我做了一些工作。 首先,它将创建一个目录,供我存储拇指。完成这项工作后,下一个是到数据库的RecordPath。
这是一个非常慢的问题(图像/ 2秒)。
这是我的工作:
class RecordPaths implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function handle()
{
$this->truncate();
$files = Storage::disk('gallery')->allFiles();
foreach($files as $file) {
$thumb = new Thumb;
$thumb->brand = explode("/", $file, 2)[0];
$thumb->name = array_slice(explode("/", $file),-1)[0];
$thumb->path = $file;
//
$thumb->size = $this->imageMetadata($file, 'fileSize');
$thumb->width = $this->imageMetadata($file, 'imageWidth');
$thumb->height = $this->imageMetadata($file, 'imageHeight');
$thumb->mime = $this->imageMetadata($file, 'mimeType');
//
$thumb->save();
}
}
public function truncate() {
return Thumb::truncate();
}
public function imageMetadata($file, $type) {
$metaData = [];
$metaData['mimeType'] = \Image::make(storage_path("app\public\gallery\\") . $file)->exif('MimeType');
$metaData['fileSize'] = \Image::make(storage_path("app\public\gallery\\") . $file)->exif('FileSize');
$metaData['imageWidth'] = \Image::make(storage_path("app\public\gallery\\") . $file)->exif('ExifImageWidth');
$metaData['imageHeight'] = \Image::make(storage_path("app\public\gallery\\") . $file)->exif('ExifImageLength');
return $metaData[$type];
}
}
handle方法中的$files = Storage::disk('gallery')->allFiles();
返回以下内容:
有人知道如何加快速度吗?