Ефективне оброблення великих наборів даних у Laravel за допомогою streamJson()

Перекладено ШІ 0 Laravel News 28 листопада, 2024

Коли ви працюєте з великими наборами даних у додатках Laravel, використання методу streamJson може кардинально покращити продуктивність та зменшити використання пам'яті. Дізнайтеся, як це працює та чому цей підхід є невід'ємною частиною оптимізації ваших веб-додатків

Коли ви працюєте з великими наборами даних у Laravel, відправка всієї інформації одразу може спричинити проблеми з продуктивністю та пам’яттю. Laravel пропонує елегантне рішення через метод streamJson, який дозволяє поступове формування JSON-даних. Цей підхід ідеально підходить для прогресивної доставки великих наборів даних у форматі, зручному для JavaScript.

# Розуміння streamJson()

Метод streamJson, доступний через об'єкт response у Laravel, забезпечує поступове формування JSON-даних. Це оптимізує продуктивність і використання пам’яті при роботі з великими наборами даних.

$request->streamJson(['data' => $yourDataset]);

# Практичний приклад

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

Ось як реалізувати це за допомогою streamJson:

<?php

namespace App\Http\Controllers;

use App\Models\Inventory;
use Illuminate\Http\Request;

class InventoryController extends Controller
{
    public function list()
    {
        return response()->streamJson([
            'inventory' => Inventory::with('supplier', 'variants')->cursor()->map(function ($item) {
                return [
                    'id' => $item->id,
                    'sku' => $item->sku,
                    'quantity' => $item->quantity,
                    'supplier' => $item->supplier->name,
                    'variants' => $item->variants->pluck('name'),
                ];
            }),
        ]);
    }
}

У цьому прикладі ми використовуємо "eager loading" для зв’язків з постачальником і варіантами, щоб уникнути проблеми N+1 запитів. Метод cursor() забезпечує ефективну ітерацію по товарах, а метод map() відповідає за форматування кожного запису під час потоку.

Ось як виглядає виведений потік:

{
    "inventory": [
        {
            "id": 1,
            "sku": "INV-001",
            "quantity": 150,
            "supplier": "Global Supplies Inc",
            "variants": ["red", "blue", "green"]
        },
        {
            "id": 2,
            "sku": "INV-002",
            "quantity": 75,
            "supplier": "Quality Goods Ltd",
            "variants": ["small", "medium"]
        },
        // ... додаткові елементи інвентарю потрапляють у потік у міру обробки
    ]
}

Метод streamJson дозволяє вашому застосунку передавати дані поступово, даючи браузеру можливість почати обробку та відображення результатів ще до отримання повного набору даних.

Використання streamJson забезпечує ефективний спосіб роботи з великими наборами даних, сприяючи кращій роботі з інтерфейсом користувача завдяки швидшій первинній завантаженню та поступовим оновленням. Це стає особливо корисним при роботі з наборами даних, які занадто великі для одноразових операцій завантаження.

Популярні

Інше, що варто прочитати

16 Оновлено 07 травня, 2026

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

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

14 Оновлено 07 травня, 2026

Claude Agent тепер інтегрований в AI Assistant для PhpStorm

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

13 Оновлено 07 травня, 2026

Створення CLI-додатка за допомогою Laravel та Docker

Зазирніть у світ Laravel, де потужний CLI-фреймворк відкриває нові можливості для розробки командного інтерфейсу. Дізнайтеся, як створити просту утиліту для перевірки акцій, яка працює з Docker, та які переваги це може принести у вашому проєкті!