Никита Дубко - «Напомни через минуту», или Как считать время в браузере

Поделиться
HTML-код
  • Опубликовано: 19 сен 2024
  • Ближайшая конференция - HolyJS 2024 Autumn, 7 ноября (online), 14-15 ноября (Санкт-Петербург + трансляция).
    Подробности и билеты: jrg.su/K18Cxd
    - -
    Пришла как-то к разработчику Мефодию задача: показывать через заданное пользователем время попап с напоминалкой, что время прошло Написал Мефодий setTimeout, запушил, тикет закрыл А пользователь так и не дождался своей напоминалки
    В докладе поговорим о том, как браузеры работают со временем, что такое время вообще и как всё-таки показать напоминалку в правильный момент

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

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

    Хороший доклад, такие интересные аспекты раскрыли.

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

    Хороший доклад. Вывод - точное время практически невозможно

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

    Никита молодец!

    • @serega.zolotaryow64
      @serega.zolotaryow64 2 года назад

      Не просто так мне нравится Никита, когда он соведущий "Веб-стандартов", который мне нравится слушать;-)

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

    Было интересно. Спасибо.
    Кто всё-таки пишет в ту самую виртуальную память время? Куда эта виртуальная память замаплена?

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

      Т.е. сначала RTC, а если что - NTP-сервер.

  • @serega.zolotaryow64
    @serega.zolotaryow64 2 года назад

    И это очень хорошо годится при разработке систем электронных очередей на приёмы и прочие события, а также расписания мероприятии в режиме реального времени. Одна из систем должна быть построена на вебе!

  • @ruvimsypa3353
    @ruvimsypa3353 3 года назад +5

    Доклад хороший, но как по мне слишком много воды. Я так и не понял, как нормально показывать попап о том, что сессия закончилась.

    • @kilirlink.....8012
      @kilirlink.....8012 2 года назад

      хороший, но непонятный. класс.

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

      так и было задумано - напиздеть ниочем на 57 минут....

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

    У этого доклада, ровно те-же проблемы что и у подкаста веб-стандарты: люди которые его делают,
    не разбираются в том, о чем они рассказывают.
    Все о чем говорит автор доклада *не имеет никакого отношения к JavaScript*
    Автор доклада рассуждает о проблемах API существующего в браузере.
    Это API не имеет никакого отношения к языку, кроме разве что того, что язык имеет
    возможность его вызвать.
    То есть ни setTimeout ни наличие EventLoop ни особенности его работы - не являются
    частью языка JavaScript. Это части HOST системы, которая выполняет RunTime, который
    обеспечивает работу в рамках спецификации JS.
    То есть автор доклада, рассуждает о проблемах реализации конкретной HOST системы,
    а не о JS.
    *JavaScript это встраиваемый язык у которого нет и не может быть своего ввода вывода*
    Я могу запустить рантайм JS в любой системе реального времени. Например minix
    которая сертифицирована как система реального времени для использования на атомных эллектростанциях,
    в критически важных для точно выполнения задачах.
    И внезапно, через API получать там время с точностью до наносекунд.
    Почему? Потому, что EventLoop как я сказал уже выше, это часть стандарта HTML5. И все особенности
    его работы связаны только с этим стандартом. А не с JavaScript.
    Разработчик который встраивает RunTime в HOST систему, вправе сделать так как ему хочется,
    в том числе сделать очереди срабатывающие с точностью которые есть у HOST системы.
    00:14:54 *Реализация setTimeout в V8*
    То, что показывает автор доклада, это не реализация setTimeout в V8. Более того это вообще не V8.
    То что показывает автор, это пример, который лежит в дереве исходников V8, простой интеграции V8
    в любую HOST систему.
    Иначе говоря, автор доклада смотрит в исходники примера простой реализации шела для V8, которая собирается как d8.
    Более того, если бы автор дал бы себе труд, хоть чуть чуть разобраться в исходнике, он бы увидел,
    что реализация setTimeout для d8 представляет из себя заглушку, которая срабатывает сразу же,
    как только вызывается setTimeout, игнорируя задержку.
    В V8 не существует реализации setTimeout. В JavaScript не существует setTimeout.
    В V8 не существует EventLoop. В JavaScript не существует EventLoop.
    *В JavaScript принципиально не может существовать подобных технологий, потому что это язык в котором нет и не будет своего ввода/вывода*
    *ИГОГО*
    Это позорище а не доклад.
    Он не только демонстрирует некомпетентность автора, но и вводит в заблуждение слушателей,
    что многократно хуже.

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

      00:16:36 *Рассуждения про await*
      Докладчику показалось мало того, как он перепутал исходники, он еще решил не оставить ни у кого
      сомнений в том, что он еще и ничего не понимает в самом JavaScript.
      await это конструкция, которая выполняет одну единственную функцию - выполнение yeild из async функции,
      которая является генератором. И ожидание разрешения промиса в любое из состояний.
      На уровне await НЕ МОЖЕТ существовать никаких оптимизаций. Потому, что в противном случае это приведет
      к несовместимости со спецификацией и как следствие отсуствию гарантий, что HOST система Node выполняет
      код JavaScript в соответствии со стандартами.
      Все оптимизации, о которых фантазирует автор, могли бы быть сделаны только на уровне самого API. Потому, что
      самому языку JS не нужны подобные оптимизации.
      00:16:52 *Сейчас все пишут Await-ами*
      У меня для докладчика плохие новости. await тами пишут только молодые программисты, которые не умеют
      в асинхронность. И чтобы не сломать себе мозг, они пишут асинхронный код как синхронный. Чем не только
      просаживают свой код в производительности (async awaite это сахар над генераторами, которые очень сложно
      поддаются оптимизации) но и теряют все преимущества, которые дает асинхронный код.
      По этой причине, любой код написанный профессиональным разработчиком в JS начисто лишен async await ов.
      Простите но дальше слушать это я не могу.
      Автор некомпетентен и не имеет никакого права делать подобные доклады.

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

    про скорость света и скорость электрона - поучи физику. доклад понравился

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

      А у Вас, ....в той физике.... которую Вы "поучили" электроны быстрее света могут двигаться?))

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

      @@albrehtdurer557 электрон не движется быстрее скорости света. электрический ток это не 1 электрон. когда на проводнике возникает разность потенциалов. то все электроны движутся одновременно. ток возникает сразу на всем протяжении проводника. скорость света тут вообще не причем.

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

      @@dmitryfokin5205 Спасибо Кэп ! ))