Примеси, обертки, декораторы, мемоизация

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

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

  • @ЮрийГалай-н9м
    @ЮрийГалай-н9м 4 года назад +6

    ---------------------------------------------------- Функции-обертки (Wrappers) ------------------------------------------------
    00:00:00 Синхронная функция-обертка
    00:02:55 Синхронная универсальная функция-обертка
    00:08:28 Асинхронная универсальная функция-обертка
    00:15:50 Синхронная функция-обертка, которая добавляет поведение (timeout)
    00:22:45 Асинхронная функция-обертка, которая добавляет поведение (timeout)
    00:25:38 Функция-обертка, которая ограничивает вызов функции до одного вызова (once)
    00:27:36 Функция-обертка, которая ограничивает вызов функции до n-го вызова (limit)
    00:29:50 Функция-обертка, которая отменяет вызов функции (cancel)
    00:32:29 Функция-обертка с методами timeout, limit, cancel
    00:39:03 Функция-обертка с методами timeout, limit, cancel (оптимизированная)
    00:42:28 Функция-обертка, которая ограничивает один вызов за 200 мс (throttle)
    ----------------------------------------------------------- Примеси (Mixins) ---------------------------------------------------------------
    00:45:47 Примесь поля через точку
    00:51:35 Примесь поля через функцию extend
    00:57:35 Примесь поля через object.assign( )
    00:59:18 Примесь поведения
    01:02:23 Примесь изменения класса
    --------------------------------------------------- Мемоизация (Memoization) ---------------------------------------------------
    01:06:50 Определение
    01:07:30 Реализация простой мемоизации
    01:14:43 Реализация простой мемоизации с проверкой скорости
    01:20:43 Удаление накопленного кэша
    01:25:35 Асинхронная мемоизация
    01:31:10 Преобразование аргументов и ключей в hash-функцию
    01:33:32 Реализация сложной мемоизации

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

    Спасибо, все уроки просто 🤯

  • @Antonio-fm1sq
    @Antonio-fm1sq 3 года назад +1

    Спасибо!

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

    Автор можно ли у Вас спросить, Вы говорите что отсутствие замыканий увеличит скорость работы алгоритма. Можно ли в таком случае избавится от замыкания заменив обращения в теле функции chache на memoized.chache? В таком случае мы будем напрямую обращаться к полю которое установили с помощью Object.assign и тогда идентификатор chache будет собран GB?

  • @oleksiikryvtsov6938
    @oleksiikryvtsov6938 5 лет назад +3

    55:23
    const extend = (obj, mixin) => (Object.keys(mixin).filter(Object.hasOwnProperty.bind(mixin)).forEach(key => obj[key] = mixin[key]), obj);

    • @daxkameron8496
      @daxkameron8496 3 года назад

      i know it is quite randomly asking but do anybody know of a good site to stream newly released movies online?

    • @joejermaine9
      @joejermaine9 3 года назад

      @Dax Kameron flixportal :P

    • @daxkameron8496
      @daxkameron8496 3 года назад

      @Joe Jermaine thank you, signed up and it seems to work :D I appreciate it!

    • @joejermaine9
      @joejermaine9 3 года назад

      @Dax Kameron happy to help xD

  • @dimitro.cardellini
    @dimitro.cardellini 5 лет назад +1

    Оптимизированный wrapper. Если уже используется замыкание, то лучше не использовать this. Тем более, что из самого объявления methods, никак не следует, чем этот this будет равен. Кроме того, в том же замыкании у нас уже объявлен wrapper, лучше его и возвращать.
    Не использование this существенно упростит использование методов вроппера для композиции (в т.ч. и в качестве колл-бэков), т.к. они все будут явно связаны wrapper.

  • @АндрейФирсов-й9з
    @АндрейФирсов-й9з 4 года назад

    В оптимизированной мемоизации ошибка: чтобы действительно не использовалось замыкание, как вы об этом говорите, надо внутри memoized заменить всюду cache на this.cache

  • @dimitro.cardellini
    @dimitro.cardellini 5 лет назад +1

    wrapper.timeout = msec => {
    setTimeout(wrapper.cancel, msec);
    return wrapper;
    };
    Т.е. wrapper.cancel не меняется, то лишнюю лямбду при установке таймера создавать не надо.

  • @ziyadseykhanov3967
    @ziyadseykhanov3967 5 лет назад

    22:27 нужно внутри функции timeout в return -е убрать timer = null ?

    • @АлександрФомин-л1э
      @АлександрФомин-л1э 5 лет назад +1

      Если ты уберешь timer = null то ты сломаешь саму функцию timeout, т.е. не будет самого смысла в обертке

    • @user-ug1fk8ob3q
      @user-ug1fk8ob3q 4 года назад

      @@АлександрФомин-л1э странно, убрал даже больше, работает как задумано:
      return (...args) => {
      if (!timer)
      return;
      // clearTimeout(timer);
      // timer = null;
      return f(...args);
      };
      и
      fn200('second');
      setTimeout(() => {
      fn200('second');
      }, 150);
      setTimeout(() => {
      fn200('second');
      }, 250);
      выводят:
      Function called, par: second
      Function called, par: second
      Function timed out

    • @boycovclub
      @boycovclub 12 дней назад

      там он внутри имиттирует debounce )) вопрос зачем это он делает таким способом

  • @ltdsci2171
    @ltdsci2171 3 года назад

    00:07:41

  • @dimitro.cardellini
    @dimitro.cardellini 5 лет назад

    С обертками (декораторами функций -- очень сложный пример: wrapAsync).
    Декораторы функций -- шикарно идут с `pipeline`-оператором: "|>".
    См. пример ниже.
    gist.github.com/DScheglov/a397fb07cb854f94e47b3041eb69c8ac

    • @andrewananenko797
      @andrewananenko797 Месяц назад

      вы с ума сошли? пайплайн оператора нету в JS, ваш код можно выбросить

    • @dimitro.cardellini
      @dimitro.cardellini Месяц назад

      ​@@andrewananenko797 тут таке питання: хто такі "ви"? ;)))
      Викидати не довелося. Ми мігрували на TS, де немає підтримки пайплайн оператора, і просто замінили все на pipe(..) -- от і все.
      Пропозиція щодо цього оператора зараз на Stage 2.
      Коли мій коментар писався (5 років тому), пропозиція була на Stage 1, і вона тоді включала мінімальну та F# імплементації, обидві допускали код, який наведено у гісті.
      І сподівання були, що воно таки скоро з'явиться ...
      Але ... зараз говорять, що це буде 2025-26 ... але це не точно ....
      Тепер щодо коментаря по суті -- він все одно справедливий, бо приклад у відео Тимура заскладний.
      В тім, відео ще старше за мій коментар, то ж гадаю, Тимур більше такі обгортки не робить