Laravel 的流式响应特性允许高效处理大型数据集,通过增量发送生成的数据,从而减少内存使用并提高响应时间。
以下是一个简单的示例,演示如何使用流式响应输出 100 行数据:
Route::get('/stream', function () { return response()->stream(function () { foreach (range(1, 100) as $number) { echo "Line {$number}\n"; ob_flush(); flush(); } }, 200, ['Content-Type' => 'text/plain']); });
接下来,我们来看一个更实际的例子,演示如何流式导出大型订单数据:
<?php namespace App\Http\Controllers; use App\Models\Order; use Illuminate\Support\Facades\DB; class ExportController extends Controller { public function exportOrders() { return response()->stream(function () { // 输出 CSV 头部 echo "Order ID,Customer,Total,Status,Date\n"; ob_flush(); flush(); // 分块处理订单以保持内存效率 Order::query() ->with('customer') ->orderBy('created_at', 'desc') ->chunk(500, function ($orders) { foreach ($orders as $order) { echo sprintf( "%s,%s,%.2f,%s,%s\n", $order->id, str_replace(',', ' ', $order->customer->name), $order->total, $order->status, $order->created_at->format('Y-m-d H:i:s') ); ob_flush(); flush(); } }); }, 200, [ 'Content-Type' => 'text/csv', 'Content-Disposition' => 'attachment; filename="orders.csv"', 'X-Accel-Buffering' => 'no' ]); } }
通过流式响应,我们可以高效处理大型数据集,同时保持较低的内存占用,并为用户提供即时的反馈。
以上是通过Laravel流响应优化大型数据传递的详细内容。更多信息请关注PHP中文网其他相关文章!