Генераторы (generators) в PHP | Глазами фрилансера

แชร์
ฝัง
  • เผยแพร่เมื่อ 31 ธ.ค. 2024

ความคิดเห็น •

  • @stanislaukaraliou4679
    @stanislaukaraliou4679 2 ปีที่แล้ว +3

    Если файл будет к примеру 1ГБ, не будет ли каждая итерация генератора обращаться к диску, тем замедляя работу?

    • @freelancer_eyes
      @freelancer_eyes  2 ปีที่แล้ว +10

      Давайте сделаем так. Я постараюсь на днях (или раньше) снять ролик с парсингом большого файла. И заодно последим за производительностью внимательнее, включая диск.

    • @stanislaukaraliou4679
      @stanislaukaraliou4679 2 ปีที่แล้ว +2

      @@freelancer_eyes Звучит потрясающе 👍

    • @dmitryalinsky5911
      @dmitryalinsky5911 2 ปีที่แล้ว +1

      Можно попробовать брать инфу отрезками. К примеру, можно создать очередь и брать по 1000 (просто число к примеру) элементов. Оптимальное количество можно узнать, хотя бы, простым подбором. Тогда будет баланс.
      Практический пример, не связанный с генераторами, но с похожим смыслом. Недавно я делал отправку уведомлений всем пользователям в БД. Ни единым запросом проводить INSERT не вариант (съест много оперативки), ни вставкой очереди по одному (будет много запросов). В итоге пришёл к тому, что по 1000 на одну операцию - это оптимальное количество.

    • @stanislaukaraliou4679
      @stanislaukaraliou4679 2 ปีที่แล้ว

      @@dmitryalinsky5911 я не вижу чем тут отличается 1000 и 100000 и 10, т.к. судя по объяснению генератор хранит в памяти грубо говоря 1 запись и что бы прочитать другую запись её надо взять откуда-то, в данном случае из файла (диска)

    • @dmitryalinsky5911
      @dmitryalinsky5911 2 ปีที่แล้ว +2

      @@stanislaukaraliou4679 Не обязательно одну. Можно с тем же успехом использовать $i += 1000 и yield range($i, $i + 999).

  • @Thepaksik
    @Thepaksik ปีที่แล้ว +2

    Спасибо, очень доходчиво и без лишней воды

    • @freelancer_eyes
      @freelancer_eyes  ปีที่แล้ว

      Спасибо на добром слове! Рад, если помог разобраться в вопросе.

  • @user_noname_78dgdh
    @user_noname_78dgdh 9 หลายเดือนก่อน +1

    Спасибо за доступное объяснение.

  • @eugenelviv7490
    @eugenelviv7490 ปีที่แล้ว +2

    Супер. Спасибо.
    Вывод: Генератор - это итератор, который позволяет проходить коллекцию не держа ее в памяти. Можно использовать для парсинга больших файлов, Http запросов, и других трудоемких операций, где нужно засунуть огромный объект в оперативку и затем пройтись по нему.

    • @freelancer_eyes
      @freelancer_eyes  ปีที่แล้ว +1

      В том-то и дело, что засовывать в оперативку не обязательно. Если работа с файлом (или чем угодно поточным) - читаем его в потоке и обрабатываем построчно. Понимая, что однажды пройдя итерацию, обратно уже не вернёмся.
      Рад быть полезным! Удачи вам в применении на практике.

  • @ДмитрийПавлович-о8н
    @ДмитрийПавлович-о8н 2 ปีที่แล้ว +1

    Огромное спасибо за ваш труд! Стало понятнее по работу генератора) Пожалуйста продолжайте делать такие видео)

    • @freelancer_eyes
      @freelancer_eyes  2 ปีที่แล้ว

      Вам огромное спасибо за поддержку! От таких комментариев мотивация делать видео растёт как на дрожжах. :)

  • @ihorrud5088
    @ihorrud5088 2 ปีที่แล้ว +1

    Супер-видео,много чего полезного для себя извлек!Спасибо

    • @freelancer_eyes
      @freelancer_eyes  2 ปีที่แล้ว

      Спасибо за поддержку! Рад быть полезным.

  • @АнтонСурыгин-ф9ж
    @АнтонСурыгин-ф9ж 6 หลายเดือนก่อน

    Спасибо! Все понятно и доступно!

  • @krokhs
    @krokhs 2 ปีที่แล้ว +1

    Большое спасибо что прислушались и раскрыли тему ! Все четко с толком и расстановкой. В коментах просят про реальный пример с бигдата, согласен это раскроет тему полностью. Будем ждать продолжение :)

    • @freelancer_eyes
      @freelancer_eyes  2 ปีที่แล้ว

      Рад, что видео понравилось! Продолжение/дополнение обязательно сделаю. Сочиняю пример поинтереснее

  • @dmitryalinsky5911
    @dmitryalinsky5911 2 ปีที่แล้ว +1

    Последний пример я всегда решал через очереди. Ну теперь ещё один инструмент добавился. Спасибо за такое доходчивое разъяснение!

    • @freelancer_eyes
      @freelancer_eyes  2 ปีที่แล้ว +1

      Вам спасибо за поддержку! Рад быть полезным.

  • @КокоревГлеб
    @КокоревГлеб ปีที่แล้ว

    Спасибо огромное, я понял генераторы! Очень не хватает иногда информации, которая объясняет суть вещей. Огромный респект за такую вдумчивую подачу знания

    • @freelancer_eyes
      @freelancer_eyes  ปีที่แล้ว +1

      Ура! Отлично! Я очень рад, что видео оказалось полезным.

  • @arta4649
    @arta4649 2 ปีที่แล้ว +1

    Спасибо, что разжевали!:) Пойду оптимизировать проекты:))

    • @freelancer_eyes
      @freelancer_eyes  2 ปีที่แล้ว

      Так им, проектам, и надо! От всей души желаю удачи. Будут вопросы по конкретике - welcome!

  • @oleksandr_mykhailov
    @oleksandr_mykhailov 2 ปีที่แล้ว +1

    Круто, спасибо за объяснение!

  • @kind1y
    @kind1y 11 หลายเดือนก่อน

    Эх, если бы я 10 лет назад начал бы учиться по вашим видео, был бы уже миллионером))

  • @topalek
    @topalek 2 ปีที่แล้ว

    Хорошее видео, спасибо!!! но было бы прям СУПЕР, если был бы пример из жизни: "А сейчас мы с вами напишем небольшой парсер csv/excel файлов с помощью генератора"

    • @arta4649
      @arta4649 2 ปีที่แล้ว

      Поддерживаю!:)

    • @freelancer_eyes
      @freelancer_eyes  2 ปีที่แล้ว +1

      Ну, что ж теперь делать. Будем записывать, значит :)
      Генераторы, часть 2, практическая. Коротенько только, чтобы самую суть.

  • @TheDinamitt
    @TheDinamitt 2 ปีที่แล้ว +1

    Как жаль, что не знал о генераторах пару дней назад) Делал тестовое задание, где нужно было сделать отчет о нагрузке посекундно в течение суток. Решение с циклами работает, но занимает много памяти. А если понадобится сделать отчет за несколько дней, памяти не хватит.

    • @freelancer_eyes
      @freelancer_eyes  2 ปีที่แล้ว

      Эх, какая досада. Кабы раньше знать. Ну, не последнее ведь тестовое задание! В следующий раз будем оперативнее! :)

  • @saharaprotocol
    @saharaprotocol 5 หลายเดือนก่อน

    6ляяя, мужик спасибо. Я задолбался искать, нахрена нужны эти генераторы, когда я тоже самое могу с массивом сделать. Спасибо.

  • @Фанат-щ9ь
    @Фанат-щ9ь 2 ปีที่แล้ว +1

    Было познавательно и полезно
    Мне понравился пример на guzzle, вот только было не ясно зачем отправлять 100 одинаковых запросов без изменения отправляемых параметров, возможно я чего то не понимаю.

    • @freelancer_eyes
      @freelancer_eyes  2 ปีที่แล้ว +1

      100 одинаковых конечно же не нужно. Но ведь никто не мешает в генератор передать нужный контекст или параметр, чтобы он yield то, что требуется

  • @Laudanum1ful
    @Laudanum1ful ปีที่แล้ว

    🔥🔥🔥🔥