Разбираемся в очередях event loop'а JavaScript

Поделиться
HTML-код
  • Опубликовано: 29 ноя 2024

Комментарии • 36

  • @nafanya3733
    @nafanya3733 2 года назад +1

    спасибо за видео! первым увидел твое видео с собесом с Муратом и затянуло, очень интересные видосы пилишь!

    • @ayub_begimkulov
      @ayub_begimkulov  2 года назад

      Да, тот собес клевый получился)

  • @demimurych1
    @demimurych1 2 года назад +4

    requestAnimationFrame создан и существует прежде всего для того,
    чтобы разработчик имел четкий сигнал в какой момент, он может
    вносить изменения в DOM, не боясь спровоцировать reflow всей области отображения.

    • @habalgarmin
      @habalgarmin 10 месяцев назад

      Подскажите пожалуйста какая его связь с eventLoop?

  • @aidarsmagulov8923
    @aidarsmagulov8923 2 года назад +2

    Круто получилось, как раз думал изучить эту тему, и начал собирать материалы для этого

  • @МарияЧерешня-у2й
    @МарияЧерешня-у2й 2 года назад +3

    Спасибо большое.

  • @krylovDev
    @krylovDev 2 года назад +1

    Ты молодец! Однозначно подписка. Хочу увидеть собес на джуна со мной на твоём канале ))))

    • @ayub_begimkulov
      @ayub_begimkulov  2 года назад

      Скажи, как с тобой можно связаться - можем подумать.

  • @sergei_sergeevu4
    @sergei_sergeevu4 2 года назад +3

    Спасибо за контент!
    Было бы круто увидеть полифил на промис, возможно даже на async await)
    requestIdleCallback - была ли у вас практика использования, хотя поддержка оставляет желать лучшего,
    но интересно в каком скоупе она выполняется)

    • @ayub_begimkulov
      @ayub_begimkulov  2 года назад +1

      По поводу promise - записал, а вот async await полифилить не получится)
      Его можно только транспайлить через babel или TS.
      RIC никогда не использовал на самом деле, use case очень редкий.
      Спасибо за фидбэк!

  • @РоманРоман-ф4к
    @РоманРоман-ф4к 2 года назад +1

    Спасибо за контент, а ты не перепутал методы shift и unshift?

    • @ayub_begimkulov
      @ayub_begimkulov  2 года назад +1

      Ага, перепутал.
      Спасибо за фидбэк!

  • @mody-pq8kd
    @mody-pq8kd Год назад

    Еще есть requestIdleCallback. Вызов во время простоя браузера(когда все очереди пусты)

  • @ДаниилБенгер
    @ДаниилБенгер Год назад +1

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

  • @YaniaRZ
    @YaniaRZ 2 года назад +1

    Спасибо, промисы будут очень кстати, а еще бы про requestAnimationFrame! Что-то никак не могу догнать как работает( Хотя я еще много чего не понимаю😅

    • @ayub_begimkulov
      @ayub_begimkulov  2 года назад

      Ахахах, постараюсь заснять что-нибудь.

  • @dimansunny7862
    @dimansunny7862 2 года назад +2

    Найс рассказал

  • @НиколайХамдамов-ь1ж

    Правильно ли я понял что микро таски выполняются прям в стеке вызова (call stack) ?

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад +1

      Вообще все таски выполняются в call stack. А в очереди они ждут, когда им нужно начать выполняться.
      Просто у очереди микротасок приоритет большой, поэтому ими можно заблочить main thread.

    • @ВладиславГришин-ш7ш
      @ВладиславГришин-ш7ш 10 месяцев назад +1

      мурыча смотрите про микротаски, в разносе чела по js из яндекса

  • @suslikest3708
    @suslikest3708 2 года назад +1

    Полезно😀

  • @Maxim9575
    @Maxim9575 2 года назад +2

    Не все observers создают микрозадачи:
    - MutationObserver - создает
    - IntersectionObserver, PerformanceObserver, ResizeObserver - не создают, часть из них производят макрозадачи и напоминают по механике rAF, но со своими причудами
    Вообще observers это очень непростая история, даже rIC будут проще в сравнении с ними.
    Что касается rAF...это этап, который происходит когда браузер считает, что рендер документа имеет смысл, rAF это не макрозадача и не микрозадача, это отдельная задача, которая входит в список операций перед пересчетом стилей, обновлением макета и покраской. Так вот если в течении какой-либо из итераций цикла происходит запрос на rAF, то все запросы попадают в специальную карту запросов rAF. Когда наступает момент вызывать обработчики rAF, то вызываются все функции обратного вызова, которые были накоплены в эту карту на протяжении циклов/а событий. По окончанию выполнения этих функций они выталкиваются из этой карты и все происходит сначала. Вложенные rAF записываются в карту, но не выполняются, так как перед выполнением rAF делается слепок функций обратного вызова, которые должны быть выполнены, все что попало после не выполняется.
    Там где я прокомментировал - добротно посмеялся. Держите правило - говорите в чем уверены наверняка. Это избавит от таких умников типо меня :)

    • @ayub_begimkulov
      @ayub_begimkulov  2 года назад

      В первую очередь, спасибо большое за подробный и развернутый комментарий!
      Касательно rAF - я вроде бы так это и объяснил, возможно не дал достаточно внимания тому, что вызывается перед пересчетом стилей, надо пересмотреть видео. Но про то, что это отдельная сущность и живет сама по себе, я как мне помниться сказал, но скорее более примитивно, нежели ты описал. Так что снимаю шляпу.
      Что же касается observer'ов, я почему-то был уверен, что они создают микротаски, по поводу MutationObserver прям на 100%, но про остальные тоже где-то читал, но тут, если честно, мало хорошей инфы, да и может сам тупанул. Так что постараюсь найти и почитать. Если есть какая-то ссылка на ресурс (английский или русский - не важно), где можно это почитать, буду очень благодарен.
      А так, если отойти от темы, было интересно, откуда это все узнал? Не хочешь прийти на канал и поделиться опытом? По формату можно подробнее обсудить)

    • @Maxim9575
      @Maxim9575 2 года назад

      ​@@ayub_begimkulov почему я расписал rAF так подробно: потому как вы сказали, что в очередь rAF ставятся "таски" - а это не верно. Этап rAF - это одна задача, которая выполняет все запланированные запросы rAF. И также вы сказали что установка вложенного rAF будет выполнена в следующем цикле, что является не совсем точным описанием. Да вложенный rAF будет выполнен в следующем цикле, но когда этот цикл будет может пройти условно 10 циклов с макрозадачми и микрозадачами, также могут быть циклы простоя условно 5 штук, а вот потом может начаться цикл, который будет иметь документ(ы) на отрисовку и вот в этом цикле будет вызвана карта функций обратного вызова rAF.
      Насчет observers, я особо за ними не следил, но я точно знал что IntersectionObserver это этап который такой же как rAF в цикле событий (стоит сразу после него), он обновляет данные об пересечениях и ставит макрозадачу для документа.
      Остальные observers как мне известно не входят в цикл событий явно кроме ResizeObserver, он интегрируется в шаг обновления рендеринга после пересчета стилей и обновления макета.
      Все что я знаю это официальные спецификации "w3_org" и "html_spec_whatwg_org" (вместо пробелов точки yt удаляет явные комментарии с ссылками)
      В данный момент нет желания. Может когда-нибудь, возможно. Как говорится может бахнем... но потом.
      P.S Голос у тебя похож на мой почти один в один, я даже дежавю поймал :)

  • @whiteguards43
    @whiteguards43 Год назад +1

    Уже 9 месяцев прошло, где видео про полифил промиса?)

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      Вот сейчас сижу материал готовлю, будет скоро.

    • @whiteguards43
      @whiteguards43 Год назад

      @@ayub_begimkulov Ждем брат, а по национальности кто вы ? Если не секрет, видно что муслим, Ма Ша Аллах1

  • @Nikitosss91
    @Nikitosss91 2 года назад +2

    Привет, классный контент, создавай чат в тг, чтобы можно было обмениваться вопросами, помогать друг другу

    • @ayub_begimkulov
      @ayub_begimkulov  2 года назад +1

      Привет, хорошая идея, надо подумать.

    • @ayub_begimkulov
      @ayub_begimkulov  2 года назад

      Создал в итоге канал в ТГ - присоединяйся)
      t.me/ayub_begimkulov_coding

  • @RinatYouldashbaev
    @RinatYouldashbaev Год назад

    Начало на 2:20.