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
James Robert TaylorOriginal
2025-03-05 16:23:14843Durchsuche

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']);
});

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!

Stellungnahme:
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