lazy() - колекції без перевантаження пам'яті
Якщо обробляється 50 000 елементів і застосовується 10 методів, звичайна колекція створить 10 копій у пам'яті.
Lazy колекції обробляють один елемент за раз.
Як працює:
Елемент проходить через усі методи і лише потім переходить до наступного.
Коли варто використовувати:
- Великі файли
- Стрімінг
- Генератори
- Обмежена пам'ять
Порада: перетворити назад у звичайну колекцію - all().
// Погано: багато копій у пам'яті
$result = collect($hugeArray)
->filter(...)
->map(...)
->sortBy(...)
->take(100);
// Добре: один елемент за раз
$result = collect($hugeArray)
->lazy()
->filter(...)
->map(...)
->sortBy(...)
->take(100)
->all();
// Великий CSV
$users = LazyCollection::make(function () {
$h = fopen('users.csv', 'r');
while ($line = fgets($h)) {
yield $line;
}
fclose($h);
})->map(fn($l) => str_getcsv($l));
// cursor() - вже lazy
User::cursor();