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中文網其他相關文章!