Rumah >pembangunan bahagian belakang >tutorial php >Mengoptimumkan penghantaran data yang besar dengan respons streaming laravel
Berikut adalah contoh mudah yang menunjukkan cara mengeluarkan 100 baris data menggunakan tindak balas streaming:
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']); });Seterusnya, mari kita lihat contoh yang lebih praktikal untuk menunjukkan cara menstrimkan data pesanan besar eksport:
<?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' ]); } }Dengan tindak balas streaming, kami dapat memproses dataset yang besar sambil mengekalkan jejak memori yang rendah dan memberikan maklum balas segera kepada pengguna.
Atas ialah kandungan terperinci Mengoptimumkan penghantaran data yang besar dengan respons streaming laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!