Heim > Backend-Entwicklung > PHP-Tutorial > Optimierung der großen Datenbereitstellung mit Laravel -Streaming -Antworten

Optimierung der großen Datenbereitstellung mit Laravel -Streaming -Antworten

James Robert Taylor
Freigeben: 2025-03-05 16:23:14
Original
839 Leute haben es durchsucht

Optimizing Large Data Delivery with Laravel Streaming Responses

Die Streaming -Reaktionsfunktion von

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']);
});
Nach dem Login kopieren

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'
        ]);
    }
}
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage