image


Дэн Абрамов рассказывает о "будущем" API — Suspense. По ходу презентации он описывает две проблемы:


  • проблема производительности устройства пользователя;
  • проблема его "коннекта" (скорости и стабильности соединения);

которые позволяет решить новое API.


P.S. Видео под катом, не забудьте включить субтитры.



Пулл-реквест намечающейся фичи.


Разработчики React обещают добавить новое API до конца года, но думаю у них получится сделать это быстрее.

Комментарии (8)


  1. mariner
    10.03.2018 18:09

    так о чем фича то? видео не смотрел.

    upd: кому интересно и текстом — medium.com/@baphemot/understanding-react-suspense-1c73b4b0b1e6


    1. vintage
      10.03.2018 21:49

      Это аналог $mol_fiber, но в 10 раз большим кодом, ибо реакт :-)


  1. faiwer
    11.03.2018 11:02

    Технические подробности уже были? При просмотре видео у меня сложилось впечатление, что vintage устроился в facebook и продвинул там идею про throw-based программирование в React :)


  1. redyuf
    11.03.2018 13:25
    +3

    Суть примерно такая: в реакт добавили 2 спец компонента: Timeout и Loading.
    1. если код оборачиваешь в Timeout, то он во время асинхронной подгрузки любого дочернего — покажет крутилку
    2. если какой-нить дочерний тоже обернут в Timeout, то он будет иметь приоритет и верхний Timeout его проигнорирует
    3. если код обернуть в Loading, то он вытащит статус загрузки isLoading со всего поддерева дочерних компонент
    4. В рендере можно сделать throw new Promise и реакт перехватит исключение, проверит что пришел промис и перерендерит компонент при ресолве промиса. Если к этому прикрутить кэш, то код выглядит как синхронный.

    Печально, что это все сильно реакт усложняет. Команде реакта можно было, например, сделать свой аналог mobx-а, запихнуть туда файберы, обработку асинхронности на исключениях и работу со стейтом.
    Такое разделение ответственности позволило бы использовать эти фичи в клонах, вроде preact/inferno и других vdom и real dom библиотеках. Даже отдельного пакета можно не выкладывать, держать в проекте, а сейчас это все прибито к react-dom.

    Добавив эту функциональность, они вступили на путь из граблей, по которым уже прошел vintage со своими атомами за последние года 2, есть множество проблем такого подхода. Например:

    Что делать, если не promise, а observable?

    Как сделать в реакте параллельную загрузку, если бросание эксепшена в render приостанавливает выполнение, а за ним может быть еще один асинхронный запрос.

    Как делать retry в случае ошибки?

    Как автоматизировать инвалидацию кэша, который в демках скорее всего достаточно примитивный, на каком-нибудь simple-cache-provider?


    1. unel
      12.03.2018 14:11

      ЕМНИП, в этом докладе говорилось, что будут предтавлены абстракции разных уровней, как высокого (типа createFetcher, ), так и низкого уровня.

      Возможно, что с их помощью можно будет решить и предложенные Вами сценарии =)


      1. unel
        12.03.2018 14:20

        типа createFetcher и <Placeholder> я имел в виду
        (постоянно забываю, что тут комментарии поддерживают HTML :-))


        1. redyuf
          12.03.2018 14:55

          Я пробовал обобщить, исходя из анализа доклада и доступных на текущий момент исходников: react-suspense-demo, бандла react-dom@16.4.0-alpha.0911da3, который собирался видимо из этого pr.

          Там пока не видно решений этих проблем. Конечно, что-нибудь придумают, может где-то даже лучше чем в атомах. Просто это путь проб и ошибок, который им придется отчасти повторить за винтажем.


  1. babylon
    11.03.2018 17:05
    -1

    redyif, толковый коммент. Пожалуй заслужил от меня подписку:)