質問: いつも大変お世話になっております。 Laravel5.4でコントローラーでやっているとある処理が重いので、 必要な処理だけ終わったら画面を返して、平行で裏で残りの処理を続けるやりを探しています。 具体的には画像ファイルをアップロードする仕組みを開発をしてます。 コンテンツのバナー用の画像、サムネイル用の画像、やや小さくしたオリジナル画像など 3種類くらいに変換をして、AWSのS3にアップしてtmpを消すという処理をしています。 上記一連の処理をController内の一つのメソッドで行なっているのですが、 アップロード後、画面を返すのに時間がかかっており、体感が悪い状態になってしまっています。 Queueで行うやり方は見つけたのですが、 アップされるタイミングが多いのと、バッチではなく随時処理したいのでできればこのような形にしたいと考えてます。 1.画像アップ 2.戻り画面ですぐに使う画像だけ変換しS3へアップロード 3.アップロード完了画面を戻す 4.引き続き裏で残りの処理を実行 ・画像を変換しアップロードする処理 ・tmpを消す処理 何か良い方法はないでしょうか。 ご教示いただければ幸いです。
回答: Laravelのキューシステムは、次のジョブデータがある場合は待機せずに次のジョブを処理します。 Laravel 5.5 キュー Laravel 5.5 Laravel Horizon 他の手段としては、以下のytakeさんのAOPライブラリの@Asyncアノテーションの処理のように、pcntl_fork()関数で子プロセスで処理する方法もあります。 ytake/Laravel-Aspect それ以上の処理は、PHPの得意とするところではあまりないのでそこだけGo言語なりを利用するのも検討できるかと思います。