首頁 >後端開發 >php教程 >通過Laravel流響應優化大型數據傳遞

通過Laravel流響應優化大型數據傳遞

James Robert Taylor
James Robert Taylor原創
2025-03-05 16:23:14847瀏覽

Optimizing Large Data Delivery with Laravel Streaming Responses

Laravel 的流式響應特性允許高效處理大型數據集,通過增量發送生成的數據,從而減少內存使用並提高響應時間。

以下是一個簡單的示例,演示如何使用流式響應輸出 100 行數據:

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

接下來,我們來看一個更實際的例子,演示如何流式導出大型訂單數據:

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

通過流式響應,我們可以高效處理大型數據集,同時保持較低的內存佔用,並為用戶提供即時的反饋。

以上是通過Laravel流響應優化大型數據傳遞的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn