Size: a a a

2021 June 27

W

WhatchThis in Laravel Pro
я не понимаю причину переполнения памяти, в этом варианте (который кидает ошибку) метод просто вызывается


   for ($i = 0; $i < 3000; $i++) {
     dispatch(function () use ($i) {
       $this->getCacheKeyName("label", $i);
     });
   }
а в этом значение сохраняется в переменную, и ошибки нет


   for ($i = 0; $i < 3000; $i++) {
     dispatch(function () use ($i) {
       $txt = __CLASS__ . "|kqwe|$i";
     });
   }
источник

w

walfter in Laravel Pro
Подгружаемый контекст
источник

W

WhatchThis in Laravel Pro
аааа, понял, он пытается в каждую задачу ещё и весь класс, в котором этот метод запихать?
источник

w

walfter in Laravel Pro
Он его в двух способах подгружает только в случае использования зис насколько помню он его каждый раз передаёт на каждый колбэк
источник

М

Максим in Laravel Pro
ну ссылку так точно
источник

G

Greadios in Laravel Pro
привет. у меня две таблицы, в которых есть колонки с одинаковым названием. как с ними работать через whereHas()
источник

w

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

W

WhatchThis in Laravel Pro
если ссылку, тогда снова не понятно откуда переполнение)
источник

w

walfter in Laravel Pro
Добавить static перед колбэком и ограничить контекст
источник

w

walfter in Laravel Pro
Он его каждый раз на цикл передаёт
источник

w

walfter in Laravel Pro
А не единожды
источник

М

Максим in Laravel Pro
предлагал, но ему нужен this в dispatch
источник

w

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

М

Максим in Laravel Pro
+1
источник

W

WhatchThis in Laravel Pro
понял, спасибо :) Буду внимательнее с этим, такая вроде тривиальная штука, и такие последствия :D
источник

М

Максим in Laravel Pro
да просто оставьте коллбыка и работайте с ним)
источник

М

Максим in Laravel Pro
Статические анонимные функции 😱

❓ Буквально на днях пришел вопрос от одного из подписчиков касательно контента этого поста. Звучал он так: "А зачем делать callback’и в функции сортировки (usort), статическими?" И я подумал, что это действительно хороший вопрос, на который стоит обратить внимание.

📄 Из документации:
При объявлении в контексте класса, текущий класс будет автоматически связан с ним, делая $this доступным внутри функций класса. Если вы не хотите автоматического связывания с текущим классом, используйте статические анонимные функции.

Выходит, что когда closure объявляется в контексте класса, то класс автоматически привязывается к замыканию. Это означает, что $this доступен внутри области анонимной функции. Вот такой вот пример.

❗️На первый взгляд "да и чёрт с ним", но стоит копнуть чуть глубже.

Замыкание, содержащее ссылку на $this, может предотвратить сборку мусора для этого объекта, что, в свою очередь, может существенно повлиять на производительность. Вот примеры с использованием static и без него. Ну и gist, чтобы самостоятельно поиграться.

👉 Если подвести короткий итог, то анонимные функции без static стоит использовать если вам необходимо привязать объект к области видимости выполнения функции. Во всех остальных случаях можно использовать static, как минимум, чтобы случайно не выстрелить себе в ногу.

#php #middle #memory #source
источник

А

Алексей in Laravel Pro
пересмотрел код, скорее всего ни в чем. по памяти вылетает в момент диспатча 1 джобы а не создания массива данных
источник

w

walfter in Laravel Pro
Насколько помню с йелдом добавиться +1 вызов на метод. Но это не точно. Не замечал значительной разницы в скорости исполнения
источник

w

walfter in Laravel Pro
Но на большом объёме большие циклы в любом случаем почуствуются=) Хоть с йелдом хоть без=)
источник