Laravel 12 Email optimize part 1 — cache — queue
Laravel 12 Email optimize part 1 — cache — queue

Laravel 12 Email optimize part 1 — cache — queue

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