Size: a a a

2021 June 27

М

Максим in Laravel Pro
Маленький лайфхак о том, как получить кучу данных по API и не переживать о своём коде ;)

👉 Представим себе достаточно стандартную ситуацию, в которой вам нужно получить из внешнего API кучу однотипных сущностей. Например вам нужно получить из сервиса рассылок всех ваших подписчиков (это не реклама, а пример приближенный к реальности ;)).

Какое решение чаще всего приходит на ум? Что-то вроде этого.

❓ И вроде всё выглядит неплохо, но какие у этого кода минусы?

❌ Тут мы пытаемся получить все данные и сохранить их в один массив. К сожалению не можем угадать, сколько там в реальности может быть данных (например разница тестового и прода) и не знаем с какой скоростью их количество может увеличиваться. В свою очередь мы рискуем получить переполнение памяти, которое мы никак не контролируем. Да и код выглядит как-то не идеально.

👌 Но выход есть! Используем генераторы.

Генератор позволяет вам писать код, использующий foreach для перебора набора данных без необходимости создания массива в памяти, что может привести к превышению лимита памяти, либо потребует довольно много времени для его создания. И наш конечный код будет выглядеть примерно следующим образом.

Конструкция yield from позволяет вам развернуть полученный массив данных и вернуть каждый его элемент.

Ставь 🍺 если было полезно или 🐒 если не используешь генераторы в коде.

#PHP #advice
источник

w

walfter in Laravel Pro
О том и речь
источник

w

walfter in Laravel Pro
У вас цикл будет вызывать метод каждый раз
источник

w

walfter in Laravel Pro
Но результат будет разный
источник

w

walfter in Laravel Pro
Потому что внутри метода цикл останавливается до следующего вызова
источник

w

walfter in Laravel Pro
Я могу ошибаться=))) Но насколько помню так работает=)
источник

А

Алексей in Laravel Pro
ну "поговаривают" что yield на 40% быстрее итераторов, но сам лично не замерял. + возможно устаревшяя информация
источник

А

Алексей in Laravel Pro
а сейчас и проверим...
источник

w

walfter in Laravel Pro
Итераторы насколько помню тоже работают на зависимостях=))) Они опрашивают класс
источник

w

walfter in Laravel Pro
От туда берут итератор
источник

w

walfter in Laravel Pro
Спрашивают где остановились
источник

w

walfter in Laravel Pro
И так по циклу
источник

w

walfter in Laravel Pro
Возможно йелды работают быстрей
источник

А

Алексей in Laravel Pro
да ща сферического коня в вакууме прогоним и посмотрим)
источник

w

walfter in Laravel Pro
Окау=)))
источник

w

walfter in Laravel Pro
Ждёмс=)))
источник

w

walfter in Laravel Pro
Не забудь простой цикл прогнать=)
источник

w

walfter in Laravel Pro
массив*
источник

А

Алексей in Laravel Pro
да просто форич на 10кк с присвоением локальной переменной пустой строки
источник

P

Pavel in Laravel Pro
подскажите как запустить тесты из Шторм?
источник