2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
简而言之: Laravel 11 引入了 defer() 方法,它可以在 HTTP 响应发送给用户之后再执行代码。无需队列、无需任务类、无需工作进程。只需将你的“发完即忘”逻辑包裹在 defer() 中,你的 API 就会立刻变快。
去年我花了整整两天时间,试图弄清楚为什么我们的订单 API 接口需要 1.2 秒才能响应。实际上,订单本身大约只用了 80 毫秒就创建完成了。那么其余的时间都去哪儿了呢?
结果发现,我们在响应返回给用户之前,同步地发送了一封确认邮件、记录了一个分析事件、与第三方服务同步了库存,并清除了一个缓存键。
用户并不关心这些操作是否在看到订单确认页面之前完成。他们只想知道自己的订单已经成功提交了。
旧方法:凡事都用队列
通常的建议是把这些任务推送到队列中。你需要创建一个任务类、分发任务、运行队列工作进程、设置监控、处理失败的任务。对于具有复杂后台处理需求的大型应用来说,这样做是合理的。
但对于像发送邮件或记录事件这样简单的“发完即忘”任务呢?为这么简单的事情搭建一整套基础设施,未免有些小题大做。
我们的应用中有 14 个不同的任务类。其中 8 个都是只有一个方法的类,只做一件小事。每个类都有自己的文件、自己的测试,以及在失败任务表中的独立记录。这感觉太过度了。
defer() 登场
Laravel 11 新增了 defer() 方法,它彻底改变了我对后台任务的看法。它的使用方式如下:
Route::post('/order', function () {
$order = Order::create($data);
defer(fn() => Mail::send(new OrderConfirmation($order)));
defer(fn() => Analytics::track('order_placed', $order));
defer(fn() => InventorySync::push($order));
defer(fn() => Cache::forget("user:{$order->user_id}:cart"));
return response
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。