Rumah > pembangunan bahagian belakang > tutorial php > Mengoptimumkan penghantaran data yang besar dengan respons streaming laravel

Mengoptimumkan penghantaran data yang besar dengan respons streaming laravel

James Robert Taylor
Lepaskan: 2025-03-05 16:23:14
asal
843 orang telah melayarinya

Optimizing Large Data Delivery with Laravel Streaming Responses

Ciri tindak balas streaming Laravel membolehkan pemprosesan yang cekap bagi set data yang besar, menghantar data yang dihasilkan secara bertahap, mengurangkan penggunaan memori dan meningkatkan masa tindak balas.

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']);
});
Salin selepas log masuk
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'
        ]);
    }
}
Salin selepas log masuk
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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan