Laravel 12 Email optimize part 1 -- cache -- queue
筆記一下上關於Email可以的優化方向
Anyway, just record something we might make it better
Cahce
當我們針對Email有些共同設定,比如說共同收件人或是一些針對共用Header Footer Component的資訊
當然我們並不希望我們每一次寄出Email的時候就去資料庫查一次,當這些資訊是不常變動的時候,我們可以在Email Component撈取資料的地方加上cache以減少撈取資料的次數
$system = cache()->remember('system_info', 60, function () {
return System::first();
});
// 這樣只會在第一次撈資料時查資料庫,之後一小時都從快取撈。
cache()->has('system_info'); // 回傳 true 或 false
// 驗證快取是否存在
Queue
第二個優化方向是Queue,我們往往需要一次寄出多封Email,但如果我們讓不管是Api還是Jobs,就需要等全部的Email寄出我們才能結束,這往往可能會導致一些問題,比如說Api有執行時間限制(?)
這時候我們就可以利用Queue去執行處理寄信這件事了
use App\Mail\xxx; // 前面建立的Email
use App\Model\xxx; // Email的資料來源
use Illumunate\Support\Facades\Mail; // Email功能
class RunEmailCommand
{
// get source
$data = ${Modle}::all()->random();
Mail::to(${收件人})->queue(new ${Email設定}($data));
}
這時候Laravel就會用queue的方式去處理寄信這件事了
php artisan queue:work # 啟動工作處理
# 查看Queue設定
php artisan tinker
config('queue.default');
Queue 設定位置
- queue.php
- .env
- 系統預設使用db queue
- 執行完會進行刪除
- table name: jobs