Heim >Backend-Entwicklung >PHP-Tutorial >Optimierung der großen Datenbereitstellung mit Laravel -Streaming -Antworten
Laravel ermöglicht eine effiziente Verarbeitung großer Datensätze, das Senden generierter Daten inkrementell, die Reduzierung des Speicherverbrauchs und die Verbesserung der Antwortzeit.
Folgendes ist ein einfaches Beispiel, das zeigt, wie 100 Datenzeilen mit Streaming -Antwort ausgegeben werden:
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']); });
Schauen wir uns als nächstes ein praktischere Beispiel an, um zu demonstrieren, wie Daten mit großen Auftragsdaten streamen:
<?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' ]); } }
Bei der Streaming -Antwort können wir große Datensätze effizient verarbeiten, gleichzeitig einen Fußspeicher mit niedrigem Speicher beibehalten und den Benutzern ein sofortiges Feedback geben.
Das obige ist der detaillierte Inhalt vonOptimierung der großen Datenbereitstellung mit Laravel -Streaming -Antworten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!