Оптимізація доставки великих обсягів даних за допомогою Streaming Responses у Laravel

2
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 17 грудня, 2025
У статті розглядається, як функція потокових відповідей у Laravel дозволяє ефективно обробляти великі обсяги даних, знижуючи використання пам'яті та покращуючи час відповіді. Долучайтеся до нас, щоб дізнатися, як реалізувати експорт даних у CSV-форматі за допомогою практичного прикладу!

Функція стрімінгових відповідей у Laravel дозволяє ефективно обробляти великі обсяги даних, поступово відправляючи інформацію в міру її генерації. Це допомагає зменшити використання пам'яті та покращує швидкість відповіді.

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

Розглянемо практичний приклад експорту великих даних у форматі CSV:

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

Стрімінгові відповіді дозволяють ефективно обробляти великі обсяги даних, зберігаючи низьке споживання пам'яті та забезпечуючи миттєвий зворотний зв'язок для користувачів.

Популярні

Logomark Logotype

Nuxt 3 + Laravel Sanctum: Просте та надійне рішення для автентифікації вашого SPA та API

У сучасній веб-розробці аутентифікація є ключовою для захисту додатків і даних користувачів. Дізнайтеся, як модуль nuxt-sanctum-authentication спростить інтеграцію між Nuxt 3 та Laravel Sanctum, забезпечуючи надійний і зручний спосіб реалізації аутентифікації для вашого проєкту

Logomark Logotype

Як задокументувати кілька API в Laravel за допомогою Scramble

Ви знали, що в одному додатку Laravel можна реалізувати кілька API? У нашій статті ви дізнаєтеся, як за допомогою Scramble легко документувати різні версії API та налаштувати доступ до документації, щоб зробити її публічною або приватною. Читайте далі, щоб дізнатися більше

Logomark Logotype

Налаштування Xdebug з Docker та PHP 8.4 всього за одну хвилину

Встановлення Xdebug може бути складним завданням, але в цій статті ми розкриємо, як швидко та просто налаштувати його за допомогою Docker на прикладі Laravel. Дочитайте до кінця, щоб дізнатися, як за кілька хвилин зробити Xdebug вашим надійним помічником у розробці