La fonction de réponse en streaming de Laravel permet un traitement efficace des grands ensembles de données, en envoyant des données générées progressivement, en réduisant l'utilisation de la mémoire et en améliorant le temps de réponse.
Ce qui suit est un exemple simple montrant comment sortir 100 lignes de données à l'aide de la réponse en 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']); });
Ensuite, examinons un exemple plus pratique pour démontrer comment diffuser l'exportation de données sur les grands commandes:
<?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' ]); } }
Avec la réponse en streaming, nous pouvons traiter efficacement de grands ensembles de données tout en maintenant une empreinte de mémoire faible et en fournissant des commentaires instantanés aux utilisateurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!