首页 >后端开发 >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