Итак, я хотел бы начать с быстрого вопроса для разогрева. Итак, Ян-Никлас, давайте начнем с вас: где вы сейчас находитесь, как у вас дела и можете ли вы вспомнить, когда впервые связались с RxJS?

Ян-Никлас: да да да, хорошо, я нахожусь в Крефельде в Германии. Я до сих пор таю, потому что здесь чертовски жарко. И я определенно не в состоянии правильно справляться с жарой, поэтому я просто умираю и не работаю должным образом или каким-либо образом. Какой был второй вопрос?

jowe: Можете ли вы вспомнить свой первый опыт работы с RxJS?

Ян-Никлас: да, на самом деле довольно забавно. Я не уверен, знают ли об этом другие, но впервые я работал с RxJS в проекте Angular, Angular 2, на этапе релиз-кандидата. И я проработал в этом проекте около полугода и понятия не имел о RxJS. Я ничего не получил. А потом я связался с Трейси и начал вносить свой вклад в документацию. И примерно так все и началось, а до этого я повсеместно использовал сменную бумагу и предметы вроде профессиональных.

Джоу: Это был хороший переход к Трейси. 🙂 Итак, Трейси, кто вы, где вы сейчас находитесь, и можете ли вы вспомнить, когда впервые связались с RxJS?

Трейси: да, конечно, меня зовут Трейси. Вы можете следить за мной в Твиттере @ladyleet, и в настоящее время я нахожусь в Атланте, штат Джорджия. Итак, все эти южане. 🙋 Но мой первый контакт с RxJS был на самом деле — вы знаете — я только изучал JavaScript и знал Бена. Бен уже был хорошим другом. И я сказал: Окей, Бен, я отключил JavaScript после второй недели работы с JavaScript, и что бы ни было в этом экспорте мух, Бен работал. Я сказал: хорошо, научи меня RxJS! А потом открыли, знаете ли, открыли песочницу кода или что-то еще, что мы использовали. И он такой: хорошо, круто, вот наблюдаемый пузырь или что-то в этом роде. А вскоре после этого он такой: «Давайте сделаем шаг назад, и почему бы нам сначала не изучить JavaScript. Так что это был мой первый опыт работы с RxJS. И, очевидно, прошли долгий путь с тех пор.

Jowe: Моше, кто вы, где вы сейчас находитесь, и можете ли вы вспомнить свой первый контакт с RxJS?

Моше: хорошо, меня зовут Моше Колодный. Я нахожусь в Нью-Йорке, и мой первый контакт с RxJS был, когда я присоединился к команде firebase. Мы работали над консолью Firebase, и это было гибридное приложение Angular 2/Angular.js. Так что мой первый контакт с RxJS, вероятно, был бы ngrx — как вы знаете — Redux-версия Angular или Angular-версия Redux. Так что это был мой первый опыт.

Jowe: Николас, не могли бы вы рассказать нам, где вы сейчас находитесь и каким был ваш первый контакт с RxJS?

Николас: конечно, меня зовут Николас Джеймисон, я нахожусь в Брисбене, Австралия, и мой первый контакт с RxJS был в бета-версии Angular 2, довольно ранней бета-версии. Раньше я использовал версии rx для .NET, это Angular 2 и бета-версия в предварительной версии. И вся эта сага была моим знакомством с RxJS.

jowe: Итак, Бен, кто ты, где ты сейчас находишься и каким был твой первый контакт с RxJS?

Бен: да ладно, меня зовут Бен Леш, сейчас я нахожусь в Остине, штат Техас. Не далее как год назад я работал в Bay Area в Google, а до этого — в Netflix, и мой первый контакт с RxJS был в Netflix, где это как-то — не знаю — навязывалось мне. И я подумал: «Что это такое, как Lodash или почему у нас это есть? Так что теперь я руководитель группы RxJS, и это началось, потому что, когда я работал в Netflix, была попытка переписать RxJS, и меня привлекли для этого. Несмотря на некоторые протесты с моей стороны, что я не квалифицирован для этого. Итак, но вот я здесь, оказывается, я прошел квалификацию — я думаю — и я все еще работаю над этим пять или шесть лет спустя.

jowe: спасибо за знакомство и краткое представление о вас. Очень рад, что вы присоединились к этой сессии, и давайте начнем задавать вопросы.

Что такое RxJS?

Так что я почти уверен, что пара людей, смотрящих этот эпизод #jskongress встречает друзей [ov: «этот поток»] не так уверены в том, что такое RxJS. Итак, не могли бы вы дать нам краткий обзор того, что такое RxJS?

принять реактивное мышление, привыкнуть к функциональному программированию

Ян-Никлас: таким образом, RxJS является своего рода реализацией по умолчанию для реактивного программирования для JavaScript. Так что дело не в Rx. Но для того, чтобы использовать это правильно, вам нужно принять реактивное мышление, как вам нужно привыкнуть к функциональному программированию. И суть этого реактивного программирования в значительной степени заключается в распространении изменений. Итак, что-то происходит; происходят какие-то изменения — как я на это реагирую? Вместо того, чтобы говорить «хорошо, пожалуйста, внесите такие изменения», это фундаментальный подход к работе с программами. И RxJS предоставляет наблюдаемую сущность для работы с такого рода изменениями, что на очень высоком уровне похоже на то, с чем имеет дело RxJS — с моей точки зрения. Я вижу, как Бен кивает, так что это похоже на согласие.

Преимущества RxJS

Jowe: да, и как RxJS делает жизнь инженера лучше, какие преимущества я получаю, когда его использую

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

Основные понятия RxJS: наблюдаемые, наблюдатели, операторы

Джоу: ммм, а какие основные концепции лежат в основе RxJS?

Николас: да, есть несколько основных концепций. И это материальное, а есть нематериальное. Я бы сказал, что основные понятия — это наблюдаемые объекты, наблюдатели и операторы:

  • Observables – это источники уведомлений.
  • Наблюдатели подписываются на эти наблюдаемые объекты, чтобы получать уведомления.
  • А операторы — это функции, которые делают их наблюдаемыми и возвращают другие наблюдаемые. Таким образом, они могут изменять уведомления, поступающие из источника, и синхронизировать их.

Самый простой способ объяснить эти компоненты — использовать аналогию:

Таким образом, observable похож на генератор событий. Но генератор событий — просто событие генерирует один тип события, тогда как наблюдаемый объект имеет три типа уведомлений. Он может дать вам уведомление о значении, чтобы дать вам значение. Он может дать вам уведомление об ошибке, чтобы сообщить вам, когда произошли ошибки. И это может дать вам полное уведомление, чтобы сказать вам, что они не будут получать никаких дальнейших уведомлений от этого наблюдаемого. Так что это что-то вроде эмиттера событий, но делает гораздо больше.

А наблюдатели — это что-то вроде прослушивателя вашего генератора событий. Но вместо того, чтобы просто получать события одного типа, вы получаете уведомления от наблюдаемых.

Операторы — аналогом оператора могут быть методы, которые находятся в массиве в JavaScript. У вас есть такие методы, как map и filter, которые позволяют вам манипулировать элементами массива. Операторы в чем-то похожи: они лежат, чтобы манипулировать уведомлениями, поступающими от источника и получаемыми. Так они до сих пор делают операторов, используемых в локации.

Некоторые люди как бы ссылаются на наш опыт Lodash для событий. Теперь вы можете как бы сопоставить эти аналогии, чтобы объяснить такую ​​терминологию.

Классная концепция: гарантии

Но есть и другая крутая концепция: это в значительной степени неосязаемо, и это гарантии. RxJS дает вам кучу гарантий. Например, поведенческие гарантии. Если вы получаете... наблюдатель получил уведомление об ошибке от наблюдаемого объекта, гарантируется, что он больше не будет получать уведомления от этого наблюдаемого объекта. Точно так же, если он получает завершение, он гарантированно не получит никаких дальнейших уведомлений от источника. В сочетании с этими гарантиями эти основные компоненты, наблюдаемые, наблюдатели и операторы, позволяют вам декларативно составлять довольно сложные числа с плавающей запятой. Чего бы вы не смогли сделать, если бы у вас не было этих гарантий. Если бы у вас не было гарантий, вы бы делали то, что вам, возможно, пришлось бы делать с генератором событий, где у вас были бы всевозможные — вы знаете — операторы if и такие вещи, как «если это произошло и это случилось, то сделай это».

Но тот факт, что он дает вам эти три основных компонента и гарантии, означает, что вы можете создавать всевозможные интересные вещи. Это декларативно.

RxJS для .NET?

jowe: кажется, я впервые столкнулся с реактивными расширениями для Java пару лет назад. Итак, есть RxJava, Rx.NET. Например, .NET можно использовать с JavaScript. Было бы лучше использовать RxJS вместо Rx.NET?

Бен: Я имею в виду, что если вы ориентируетесь на JavaScript или TypeScript, вам, вероятно, лучше использовать RxJS. Rx.NET — насколько я даже не уверен, что бы вы сделали, чтобы использовать или принять его для таргетинга на JavaScript. Я предполагаю, что есть какой-то этап компиляции, на котором C# компилируется в JavaScript или что-то в этом роде. Но это странно, именно здесь родился RxJS. Например, когда-то давно был этот проект под названием Microsoft Project Volta, который фактически использовал реактивный логотип X в качестве своего логотипа в Microsoft. Цель состояла в том, чтобы скомпилировать C# в JavaScript. И, в конце концов, я считаю, что от него отказались, потому что TypeScript стал настолько популярным и подходил, что нужно было лучше. Но RxJS изначально разрабатывался как цель компиляции для Rx.NET. Таким образом, он имел примерно такую ​​же форму. И когда они построили вы знаете C# до JavaScript, они могли использовать эту библиотеку. Но это — насколько мне известно — единственная сохранившаяся часть. Я мог бы испортить часть этой истории. Но я уверен, что Мэтт в какой-то момент вмешается в комментарии и скажет мне, где я был неправ [примечание редактора: Мэтью Подвысоцкий, квасцы RxJS].

Но это основная суть:

Если вы ориентируетесь на JavaScript или TypeScript, я бы рекомендовал использовать RxJS.

Джоу: да, верно, так что мы получили довольно хорошее представление о том, что такое RxJS. Какие концепции стоят за этим. И каковы основные преимущества его использования.

Цифры и статистика

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

Трейси: ладно, RxJS прямо сейчас — я думаю, на прошлой неделе было около 19 миллионов в неделю. Так что это число постоянно растет с течением времени, и это здорово. Вы знаете, что RxJS — единственная внешняя зависимость в Angular. Так что многое из этого … большой рост в Angular. Но на самом деле RxJS превышает количество загрузок npm из Angular. И это потому, что многие люди используют RxJS, будь то с ванильным JavaScript, React или Vue. Вы знаете, еще одна вещь — я думаю, что интересно наблюдать за внедрением React. Итак, мы с Беном проводим семинары по рецепту. И вы знаете, как здорово видеть, что люди из Angular, люди из React и люди из Vue приходят на эти семинары, чтобы учиться. По мере того, как люди уходят от Redux, мы видим, что все больше людей используют RxJS для случаев, когда они хотят отменить или передать потоковые данные, которые они хотят составить. Так что рост очень захватывающий. На самом деле Бен сейчас занимается React на полную ставку. Раньше он был в команде Angular, но теперь полностью посвятил себя React. И я думаю, что многие из нас на самом деле такие, я знаю, что Николас тоже.

Сообщите об использовании RxJS

Джоу: что касается цифр: Николас написал инструмент для анонимного сообщения об использовании RxJS API. Как возникла идея? И как это работает? Вы можете рассказать нам об этом, Николас?

Николас: о, ладно, да, это в последний раз пришло из обсуждения, которое мы провели на собраниях основной команды, где мы говорили только о том, «как люди используют API». Так что я написал это на выходных, потому что это было связано с каким-то другим кодом, над которым я работал. Сегодня утром я не смотрел на реальную статистику. Я посмотрел вчера после того, как проснулся. И, к сожалению, их было 2 — два человека сообщили о своей статистике использования. Но я посмотрю и посмотрю, что там позже сегодня. Один человек сообщил об ошибке, и это было круто! Он сообщил об ошибке, он фактически исправил ошибку, а затем сообщил о своей статистике. Так это здорово! Но главное: я хотел просто дать людям возможность делать это полностью анонимно и не автоматизировано.

Я не хотел, чтобы что-то работало в фоновом режиме, когда вы устанавливали RxJS.

Потому что это занимает немного времени. Также не очень удобно отправлять информацию с чьего-то компьютера, когда он просто устанавливает пакет. Но да, еще не слишком много результатов. Это многообещающе и, надеюсь, даст нам хорошее представление о том, что люди используют. Интересно, что в RxJS есть пара вещей, о которых сообщалось, у них была целая куча разных версий RxJS и в разных версиях TypeScript, так что, очевидно, они запускали монорепозиторий. Интересно с точки зрения числа.

Джоу: Я также хотел бы сообщить об использовании в моих проектах. Где найти этот инструмент и как его включить? Требуется ли много настроек, например, много усилий, или это просто как «в этой зависимости», и она работает из коробки?

Николас: вы можете добавить зависимость. На днях я разместил запись в блоге в Твиттере. В блоге как бы объяснили, как это сделать. Так что, если кто-то хочет использовать этот инструмент, я должен взглянуть на это. Если кто-то использует какой-либо из моих пакетов, любой из пакетов, которые я изменил, я добавил этот инструмент в качестве зависимости от пакета. Поэтому, если вы используете правила ESLint, которые я написал, или правила TSLint, которые я написал, у вас будет установлен этот инструмент. Так что все, что вам нужно сделать в этом случае, это запустить npm rxjs-report-usage, и он соберет данные об использовании. Он покажет вам использование, он подскажет, действительно ли вы хотите отправить его в Cortana. Если вы скажете да, отправьте это, он просто отправит его в форму Google, и мы сможем продолжить и собрать его позже. Так что, если вы используете одно из правил ESLint/TSLint или используете шарики RxJS или RxJS и т. д.: у вас уже установлен инструмент, и вы можете просто запустить его. В качестве альтернативы вы можете использовать npx и запустить его напрямую, что загрузит для вас скрипт и запустит его. Таким образом, вы можете запустить npx RxJS — отчет — использование, и он соберет показанное вам использование и предложит вам отправить его.

jowe: хорошо, значит, те, кому интересно, Николас использует твиттер-дескриптор @ncjamieson, и я думаю, что это первый твит, который упоминает этот инструмент, а также дает вам ссылку на сообщение в блоге. и да, как и почему вы можете его использовать

Бен: это большое дело, поэтому, пожалуйста, сделайте это, если вы слушаете это! Потому что это нам очень поможет.

Мотивация получать метрики

Джоу: давайте продолжим с этим вопросом, сейчас он не отмечен в документе [примечание редактора: вопросы для сессии, которые были подготовлены заранее, и из живого чата доступны по все участники сеанса в общем документе]. И я думаю, что это довольно интересно: каковы намерения, например, каковы ваши ожидания от получения все большего количества показателей по этому вопросу? Вы уже упоминали об использовании, которое вы отслеживаете? Как разные версии, которые используются снаружи, какие версии RxJS, какие версии TypeScript? Например, каковы ваши ожидания относительно показателей, которые вы собираете, есть ли они?

Бен: О, RxJS сам по себе имеет огромную поверхность API. Итак, одна из интересных вещей, которую мы можем извлечь из этого, это, например, некоторые показатели того, какие части RxJS часто используются. И это даст нам представление о том, есть ли что-то, что мы могли бы осудить и удалить. Или что-нибудь, что мы должны расставить по приоритетам из соображений производительности. Или что-то в этом роде, если мы знаем, что все по какой-то причине используют окно и оператор. Что является полярной противоположностью реальности. Я не думаю, что многие этим пользуются. Но если по какой-то причине его использует много людей, мы знаем, что не хотим осуждать его и удалять или что-то в этом роде. Так что просто вещи в этом роде. Это помогает нам принимать решения, если у нас есть больше знаний о том, как люди используют библиотеку.

Эволюция RxJS

Джоу: RxJS является общедоступным уже пару лет. Было бы интересно получить краткий обзор того, как он развивался до сих пор: относительно архитектуры, размера команды, процессов, которые вы используете. Можете ли вы дать нам краткий обзор об этом?

Бен: конечно, так что на самом деле многое из этого. Команда, которую вы видите перед собой, за исключением Трейси, относительно недавняя в истории команды. Это были последние полтора года или, может быть, немного больше, когда у нас были эти люди. Но команда развивалась в этом. Так что изначально это был такой скунсовый проект в Netflix, где я работал с парнем по имени Пол Тео, который работал со мной в Netflix, который был первоначальным архитектором многих частей RxJS в том виде, в каком он существует. И парень по имени Джон Хуссейн, который участвует в TC39, у которого было заметное предложение перед TC39 от имени Netflix, и я руководил проектом, хотя какое-то время я не был основным архитектором многих функций. . А потом Пол ушел из Netflix, и после этого только я работал над этим. И появился OJ, OJ Kwon, которого сегодня нет с нами, но он все еще в основной команде. И он постоянно встречается с нами. И он начал просматривать мои пулреквесты. Слава Богу, у меня есть кто-то, кто может просмотреть мой запрос на включение, потому что это был только я. И в конце концов, вы знаете, я попросил его просто присоединиться ко мне, потому что он представлял свой собственный PRS и тому подобное. Итак, это были я и он. Андре Стульц некоторое время был с нами, чтобы написать документацию. А потом у нас было… Дэвид Дрисколл присоединился к нам на какое-то время. Он в основном неактивен, но он все еще в основной команде, и мы видим его время от времени. А потом, как раз со временем, к нам присоединяется Трейси, чтобы помогать проекту и продвигать RxJS и тому подобное. А потом у нас… Николай присоединился к нам, чтобы работать в доках. Но я не знаю, как Николас нашел нас. Трейси нашла вас или вы вызвались на то, что искала Трейси?

Трейси: Многие из команды, нынешняя команда, с которой я работал вместе, просто из основной команды сказали: «Эй, вы знаете, нам нужна помощь с документами — просто приходите помочь». И вы знаете, мы были так благодарны, что люди, которые просто работали над документами и помогали, стали частью основной основной команды. Так что это просто очень приятно видеть. Но да, я думаю, Николас начал помогать мне с документами. И знаете, остальное уже история.

Бен: Да, если говорить о праве собственности на проект. Первоначальная версия RxJS была проектом Microsoft с открытым исходным кодом, и существует соглашение между людьми в сообществе Reactive X, которое не было организацией Microsoft. То, что это должно быть перемещено в реактивный X. Microsoft не возражала, и поэтому, если вы когда-нибудь посмотрите на лицензию: лицензия довольно странная, там написано «авторское право Microsoft, авторское право Netflix, авторское право Google и участники». Так вот, и это только что было. Были адвокаты, которые были пугающими. Они были вовлечены в это. «Позвольте мне получить электронное письмо от юриста одной из этих многомиллиардных компаний». И ты такой: «О, я найду одного из этих других юристов из компании, в которой я работаю, чтобы разобраться с этим. Потому что я не знаю, как ответить, и должен ли я вообще отвечать на это». Таково было соглашение, которое было изложено. Так что теперь это настоящий проект с открытым исходным кодом во всех отношениях. Это не связано с чьими-либо соглашениями или чем-то подобным, как некоторые из корпоративных проектов с открытым исходным кодом. Так что единственное, что в нем уникально, это то, что это была фишка Microsoft, Microsoft разрешила использовать полностью открытый исходный код. И он следовал за участниками, куда бы они ни пошли, между работой и тому подобными вещами.

Будущее RxJS

jowe: Я почти уверен, что следующий вопрос вы услышите много раз, потому что мы разговариваем с людьми, которые поддерживают холодную основу из слоновой кости. Они говорят мне, что все с такой высокой заметностью, самые распространенные вопросы, которые им задают на конференциях, в Твиттере или где-либо еще: Когда следующий релиз не за горами? Поэтому для меня большая честь задать этот вопрос вам напрямую. Итак, когда запланирован следующий выпуск RxJS?

Трейси: Мы обсуждали это внутри компании, и это может произойти со дня на день. Я думаю, что все еще происходит несколько запросов на вытягивание. И версия 7 прямо сейчас все еще находится в бета-версии. И мы надеемся вывести его из бета-версии очень скоро. Несколько вещей, над которыми мы работали, в основном касались решения некоторых проблем с типизацией и выяснения того, что делать с новым API кадров анимации. Так что ничего сверхъестественного. Я думаю, что все мы забегаем вперед и с нетерпением ждем нашего RxJS b, о котором мы говорили. Но, очевидно, сосредоточьтесь на том, чтобы сначала выйти из бета-версии 7.

Бен: И с этой целью на людей оказывается давление. Я бы порекомендовал людям попробовать бета-версию или, возможно, очень скоро опубликую здесь еще одну бета-версию. Есть пара проблем, над которыми мы ждем коллег. И я думаю, ты приземлил их вчера, может быть. Но я рекомендую людям попробовать бета-версию и — просто для справки — Google действительно использует ее. Так что способ, которым Google делает Angular и использует. RxJS отличается тем, что у Google есть огромный внутренний монорепозиторий. Это очень большая вещь, и у них есть одна версия каждой библиотеки в их монорепозитории. Итак, что они делают, чтобы получить последнюю версию RxJS, так это то, что они буквально иногда вытаскивают ее из мастера. И они видят, работает ли это внутри. Они дают нам обратную связь, если мы что-то ломаем. Так что мы знаем еще до того, как опубликуем наш релиз. И тогда они на самом деле используют версию из мастера в нашем репозитории. Так что технически, когда вы используете такие вещи, как YouTube или некоторые другие свойства Google, вы на самом деле используете что-то, что использует предварительную публикацию RxJS версии 7 в производстве. Так что, если бы он не был стабильным, мы бы уже знали многое. Так что это довольно стабильная вещь.

Марко Стипек: Очевидно, основная ветвь rxjs работает, иначе мы не смогли бы транслировать здесь. Интересно

JSKongress: вот хороший пример, представленный на последнем #jskongress: Разбор полностью функционально-реактивного JavaScript-приложения | Нетта Бонди [смотреть сеанс полностью 22:59]
[из живого чата]

Сейчас самое главное, мы просто хотим попытаться уладить некоторые проблемы с набором текста. А это требует времени и требует времени. Потому что многие люди привыкли к этим корпоративным проектам с открытым исходным кодом, таким большим, как Angular, React и тому подобное или даже Vue. Он не поддерживается корпорацией напрямую, но над ним работают преданные своему делу сотрудники, работающие полный рабочий день. Которые оплачиваются из различных фондов. Мы все делаем это добровольно. Таким образом, работа, которую мы выполняем над ним, носит спорадический характер в зависимости от нашей повседневной рабочей нагрузки и нашей личной жизни. Если кто-то из нас, кто много работает над этим, уничтожит родительский дом чертовым взрывом или чем-то еще, что на самом деле произошло. Есть некоторые работы, которые приостанавливаются на некоторое время, так что есть вещи, которые, я думаю, людям иногда трудно проглотить или понять, например, почему RxJS требует времени. Особенно, когда я работал в Google, люди думали, что это моя работа на полную ставку — такого никогда не было. Итак, вы знаете, что это просто то, что нужно иметь в виду, когда мы говорим «о, да, это со дня на день». И знаете, прошло два месяца. И, наконец, возможно, мы выпустим что-то еще. Потому что это все волонтерская работа.

Как поддержать RxJS

Джоу: Итак, с чего начать поддержку проекта? У вас есть регулярные встречи? Могу ли я просто подобрать задачу на GitHub? Что было бы хорошим подходом? Что бы вы порекомендовали тому, кто заинтересован, но, например, еще не участвовал в проекте с открытым исходным кодом?

Ян-Никлас: Очевидно, участие в документации очень ценно и требует от меня много работы. Поэтому я очень ценю всех, кто хочет внести свой вклад в документацию — тем более, что это намного проще, чем вносить свой вклад в дополнительную кодовую базу без каких-либо блоков. Так что, если кто-то хочет внести свой вклад, честно говоря, я думаю, что первое, что я могу сделать, это: Свяжитесь со мной! Чтобы мы могли выяснить, как внести свой вклад в документы. Если кто-то действительно очень увлечен — и я не хочу никого заставлять заниматься документацией, если вы этого не хотите. Но для другой работы ему, вероятно, нужно обратиться к одному из этих парней — по крайней мере, не ко мне.

Бен: Я просто назначу кодирование вещей, связанных с документацией. Одна из вещей, о которой люди постоянно просят, — это более реалистичные примеры для документации. Так что это законное написание кода, и код должен работать. Но вы знаете, что это для документации, и это очень важно, потому что я бы сказал, что код документации, вероятно, больше влияет на повседневную жизнь людей, использующих RxJS, чем настоящие внутренние компоненты. Так что я определенно рекомендую это, если вы видите, что это действительно сделано в качестве упрощенного примера, и вы можете подумать о реальном мире, который вы можете использовать в блице стека или чем-то еще. Тогда, во что бы то ни стало, внесите свой вклад, потому что это было бы большой помощью.

Тем, кто заинтересован в поддержке проекта. Пожалуйста, свяжитесь с нами!

jowe: загляните в репозиторий или пропингуйте кого-нибудь из присутствующих здесь в прямом эфире: @ladyleet, @ncjamieson, @BenLesh, @mkldny, @niklas_wortmann . Я почти уверен, что все рады получить некоторую поддержку.

Начните с RxJS

Вот мы сейчас и поговорили о том, что такое RxJS вообще, об истории и будущем. Поговорим о присутствии. Каков хороший способ начать работу с RxJS? Вы бы порекомендовали просто прочитать документы? Есть ли шаблонные проекты, которые я могу использовать повторно? Чтобы вы посоветовали?

документы RxJS

Ян-Никлас: Несмотря на то, что документы, безусловно, потрясающие, и в них содержится блестящий контент. Все супер четко. 😂 Я, вероятно, скорее порекомендую — так что я упоминал ранее, что вам действительно не нужно изучать все операторы, если вы начинаете с RxJS, который не очень интересен.

получить «мышление RxJS»

То, что вам нужно сделать, это как получить это другое мышление. На самом деле это трудновыполнимая задача. Как только вы получили это, как «как это работает, и что это такое». После этого вы заметите, что операторы и все эти неприятные вещи стали намного проще. Так что, честно говоря, то, что я понял, является основой, такой же, как создание глупых вещей с RxJS. И поэтому я бы лично рекомендовал: вы уже используете любую технологию. Просто попробуйте добавить RxJS и, возможно, создайте функцию, которую вы уже реализовали с помощью RxJS. Или, если в данный момент у вас ничего не выходит из головы, возможно, реализуйте поиск с опережением ввода и перетаскиванием карузо. Такие вещи, ориентированные на события, действительно хороши для идей. И действительно поможет вам также понять, в чем сильные стороны RxJS и в чем польза от его использования. Так что это, вероятно, пойдет с вами.

Учебные ресурсы: изучите RxJS и как реагировать

Есть несколько хороших ресурсов, которые я хотел бы порекомендовать, один из них — Изучение RxJS, а другой — реактивный способ.

В Learn RxJS используется такой подход, когда есть такие вещи, как «вот пример использования» и «мы используем эти операторы для этого». А другой — реактивный как, для этого вам уже нужно быть знакомым с RxJS, потому что он показывает различия между операторами. Но анимация красивая, и это действительно полезно, если вы боретесь, например, «хорошо, в чем разница между картой переключения и картой слияния». Так что это будут мои другие два ресурса и документы наверняка.

RxJS делает веб-разработку еще лучше

Джоу: Предположим, я уже начал. И я все больше и больше увлекаюсь RxJS. Я хочу использовать его все больше и больше в своей повседневной жизни во время разработки работы. Как сделать веб-разработку на RxJS еще лучше, чем сейчас?

Моше: Многие вещи, связанные с RxJS, связаны со значениями, которые меняются со временем, и которые со временем проходят и исчезают. Если вы попытаетесь сделать это вручную — а я помню ранние дни, когда в jQuery были эмиттеры событий и пытались связать вещи вместе, это превращается в беспорядок — абсолютный кошмар. 🙈 Чтобы иметь возможность управлять всеми происходящими событиями, отслеживание состояния — это чудовище. Вы знаете, вам в значительной степени нужно написать конечный автомат со всеми этими различными перестановками каждой переменной, которая может произойти. Из-за больших гарантий, о которых Николас упоминал ранее, обеспечивается некоторое здравомыслие во многих структурах этого вопроса. Итак, вы знаете, что, как эти события происходят. У меня есть оператор, который сообщает, что этот поток событий остановится, если произойдет что-то еще. И я мог бы повторить это на другом потоке. И у меня мог быть интервал, когда я делал это определенное количество раз или в определенных комбинациях перестановок событий. Такое случается довольно часто — нет предела возможностям. Так что, если пытаться сделать это вручную — для всех целей — невозможно, если вы не сверхчеловек. Таким образом, наличие хорошо протестированной, хорошо документированной и понятной библиотеки, выполняющей всю эту рутинную сантехнику за вас, делает все намного проще.

Redux, React, RxJS — работаете вместе?

Джоу: Итак, вы только что упомянули об управлении состоянием. Это подводит меня к Redux: Redux, React, RxJS, все они копаются в состояниях. Кроме того, React, как и Redux, является основной вспомогательной библиотекой, поэтому. Но давайте поговорим о Redux и RxJS: можно ли их использовать вместе? Делают ли они друг друга излишними? Каков ваш опыт в этом и ваши рекомендации?

Николас: Да, там определенно можно использовать Redux и RxJS. Они решают разные задачи. Вы можете одновременно использовать React, Redux и RxJS. Для этого есть наблюдаемый пакет Redux. Стоит ли вам это делать, на самом деле зависит от того, насколько вы знакомы с каждой из отдельных частей. Если вы знакомы с React, знакомы с Redux и знакомы с RxJS, вы можете использовать что-то вроде Redux-observable для решения проблемы. В основном эти вещи делают разные вещи. В этом смысле RxJS управляет асинхронными эффектами, которые на самом деле происходят внутри Redux. Принимая во внимание, что Redux предоставляет глобальное хранилище с изменениями на основе действий. Так что они, конечно, не делают друг друга лишними, вы определенно можете использовать оба. Это просто зависит от того, что вы пытаетесь сделать, и проблемы, которую вы пытаетесь решить. И если это соответствует задаче, которую вы собираетесь решить, то обязательно используйте все три.

Пример ситуации, когда имеет смысл их использовать: Если у вас большое приложение, и у вас есть не все бэкенды. Идеально с точки зрения внешнего интерфейса. Поэтому вам часто приходится иметь дело с фрагментированными серверными частями. И когда что-то происходит во внешнем интерфейсе, у вас может быть несколько запросов, отправленных на бэкэнд. В любое время, когда вам нужно координировать такие вещи, RxJS — хороший кандидат. Итак, если у вас есть большое приложение Redux и у вас фрагментированный бэкенд, и вы хотите организовать кучу бэкэнд-запросов, когда происходят действия. Для решения этой проблемы имеет смысл использовать RxJS и Redux.

Но я бы нарушил его таким образом, я бы посмотрел на проблемы, которые вам нужно решить. Посмотрите на инструменты, которые у вас есть. Посмотрите, как они решают проблемы. И выясните, подходят ли они для вашего приложения. Но они точно разные. Это не делает другое излишним. И вы определенно можете комбинировать два или три.

Инсайты

Джоу: Давайте перейдем к следующему разделу, посвященному статистике. Мне любопытно! Я вижу вас на многих конференциях, я видел вас в прошлом, не сейчас. Мне это интересно. Как вы получаете отзывы от сообщества разработчиков, от сообщества, использующего RxJS, от разных людей? Откуда вы получаете отзывы о том, какие функции можно добавить, какие функции необходимо оптимизировать?

GitHub и переполнение стека

Ян-Никлас: Так что они наверняка похожи на очевидную платформу GitHub. Мы получаем проблемы, пул-реквесты и тому подобное. Также каждый из нас достаточно активен в Твиттере. Поэтому люди обращаются к нам со словами: Хорошо, у меня проблема, в чем дело. И из такого рода вещей мы можем видеть, что, возможно, это слишком сложно или требует некоторой адаптации. То же самое относится и к Переполнению стека: так что каждый из нас довольно активно работает с переполнением стека. У нас есть канал на GitHub, куда некоторые из нас иногда заглядывают, чтобы помочь. Но и в целом коммьюнити достаточно активное и обращается туда. У нас есть Slack, который не так активно используется сообществом, но мы используем его для организации своей работы. Да, и наверняка каждый из нас ходит на конференции, разговаривает с людьми, проводит переговоры, ходит на встречи и тому подобное. Я думаю, что это очень похоже на основные вещи. И на самом деле забавная вещь: наблюдаемый кадр анимации был в значительной степени для RxJS Live [примечание редактора: событие для RxJS] в прошлом году. Мы как бы сильно забыли об этой функции. Глядя на переговоры, я подумал: О нет, это не может быть правильным решением для этого.

Основная команда RxJS = волонтеры с дневной работой

Бен: Есть еще одно четкое различие между командой, подобной нашей, и командами, которые, как многие говорят, похожи на корпорации. И это частично связано с тем, что мы все добровольно работаем над этим. Но когда я не был в команде Angular — я был в команде Angular — все, с кем я работал, были потрясающими супер-умными замечательными людьми. Но они все время работали над Angular, верно. Это означает, что они не проводят большую часть своего дня, используя Angular, как другие люди. Они используют его, но они используют его примерно так же, как когда вы пишете тесты. Ваша работа в команде Angular. Вы пишете эти надуманные тесты, предназначенные для проверки определенных частей фреймворка, а не для работы с очень-очень большими приложениями. Теперь иногда нам звонили, чтобы помочь кому-то в остальной части Google или что-то в этом роде, и помочь им с настоящим приложением. Но большая часть работы там — в команде Angular, и я уверен, что так же и в команде React, и, может быть, в меньшей степени в команде Vue — но вы работаете над фреймворком, в библиотеке. И все это концептуально, например, как это используется. Где каждый из нас имеет постоянную работу. И, по крайней мере, я предполагаю, что все остальные здесь все время используют RxJS на работе. Вы получаете довольно хорошее представление о вещах, которые хотели бы изменить или исправить. Вещи, которые я даже не знаю, документировал ли я когда-либо, но я рассмотрю такие вещи, как группировать по, и у них есть аргументы. И я действительно хотел бы, чтобы это был объект конфигурации, который был передан. Так что я знал, какие аргументы были, потому что я не всегда помню аргументы. И я написал чертову вещь.

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

Джоу: Это своего рода поедание собачьей еды.

Бен: о да

Технический долг

Джоу: хорошо. Итак, мы поговорили обо всех вкладах и проблемах. Одна вещь, я думаю, что все в IT затронуты, это тема «технический долг». Какова ваша стратегия по работе с техническими долгами?

Бен: Итак, я предполагаю, что вы спрашиваете о техническом долге как о техническом долге. Да, так что технический долг в библиотеке — это сложно. Это широко используется. Как раз то, что у нас есть, например… смотри, здесь есть пара частей. У нас есть много тестов по всей широте всего, что мы делаем. Так что, если в этой служебной библиотеке есть технический долг, который — он существует — но он довольно минимален. В идеале мы можем рефакторить что-то, не меняя никаких тестов. И если тесты все-таки проходят, то мы знаем, что ничего не нарушили. Так что есть такая сторона. Но самая большая и важная вещь — убедиться, что любой технический долг, который мы пытаемся исправить, сделан таким образом, что мы не выпускаем патч, который сломает миллион проектов.

не ломай миллион проектов

Или что-то, что, например, недавно у нас был технический долг по теме, который является одним из основных типов в RxJS. И что это было, мы начали работать в RxJS, или я начал работать в RxJS, но давным-давно, когда — я думаю — TypeScript 1.8 был самой популярной версией TypeScript, а TypeScript 2 или 2.1 только что были выпущены. И он не поддерживал некоторые функции. Поэтому, если вы создали тему void для вызова next, вам нужно было передать ей undefined. И это сделало его неэргономичным для некоторых вариантов использования Angular. Поэтому мы сделали next … значение next необязательным, хотя на самом деле оно не является необязательным. Это было необязательным в TypeScript. Он сказал: «Вам не нужно передавать значение здесь». Поэтому, если вы сделали субъективный номер, TypeScript позволит вам и сегодня, и в версии 6 вызывать next без передачи ему номера.

И это на самом деле неправильно. Вы можете создавать ошибки, и вы не должны быть в состоянии сделать это. Но это был небольшой технический долг. И это был технический долг, потому что нам пришлось ждать, пока TypeScript дойдет до точки, где… если у вас есть субъективная void, она автоматически позволит вам вызвать next без аргумента, что и делает сейчас. Так что нам пришлось пройти через это, и мы должны были это исправить. Мы должны были исправить это в основной версии, потому что если бы мы это исправили — даже если это ошибка в наших типах — если бы мы это исправили и опубликовали в патче для версии 6 или даже в второстепенном для версии 6. Несмотря на то, что это исправление ошибки, оно сломает так много людей и так много сборок, что будет несостоятельным как патч. Поэтому нам нужно было убедиться, что мы учитываем, сколько людей используют это. Потому что скачается столько раз в неделю и сколько народу сломается. Так что это немного отличается, если это был мой личный проект, который я… о нет, я вижу только около 12 загрузок. Вы прекрасно знаете, мы можем опубликовать патч для изменения типа. А если сломается все 12 человек. И, возможно, я получу неприятный грамм в какой-то момент.

вставать в 1 ночи…

Но если мы опубликуем что-то, что сломает многих людей. И я делал это в прошлом. Раньше любого из этих людей, я думаю, мы даже здесь. Например, я начинаю получать тексты и сообщения и пинговать в час ночи от людей, которые замечают, что их счета за непрерывную интеграцию нарушены, и они не знают, почему. А потом выясняют, что это RxJS. А то у меня срыв. Поэтому, если вам нужно убедиться, что мы внимательно рассматриваем каждое вносимое нами изменение, особенно те, которые мы считаем просто техническим долгом или исправлениями ошибок. Поскольку это такой широко используемый проект, это также означает, что нам нужно двигаться намного медленнее. Потому что его использует очень много людей.

Джоу: Какова была ситуация и вам понравилась задача? Как вы разрешили кризис, который вы только что упомянули? Почему вы выскочили в 1:00 ночи? Координируйте действия, например, кто занимается расследованием и исправлением ошибки? Как вам эта ситуация?

Бен: Честно говоря, в тот конкретный момент времени это ничем не отличалось от «что произойдет, если вы дежурите на любой другой работе», верно. Я видел, о боже, все происходящее. В общем, я встал, умылся и пошел к компьютеру. И разобрался в чем дело. Решил это. И опубликовал еще один патч, исправляющий ошибку. Но это было неловко и трудно. И это произошло на ранней стадии. Это случилось несколько раз. Но этого давно не было.

Замечательная сеть поддержки

Теперь у нас есть замечательные люди, которые помогают нам. Итак, Майкл-Джеймс Парсонс и Кристин Лег работают в Google, Моше тоже делал это в Google, а я делал это сам. Я создал эту группу в Google перед тем, как уйти. На самом деле это люди, ответственные за добавление мастера RxJS в Google. А это означает, что он работает с тысячами целей. И мы смотрим, не сломали ли мы что-нибудь. Где мы ломали тесты людей или ломали функциональность. Или мы ломали сборки людей. И мы получаем отзывы об этом, прежде чем опубликовать версию в npm. Так что это была большая временная мера для предотвращения повторения подобных вещей.

Оставайтесь в курсе RxJS

Джоу: Итак, мне уже пора задать последний вопрос. Итак, последний вопрос от меня, и мне интересно, например: какой ресурс вы рекомендуете, когда я хочу быть в курсе что происходит с RxJS? О текущих обсуждениях, новых выпусках. Будет ли лучшим источником GitHub, веб-сайт, Twitter? Что ты посоветуешь, Трейси?

Трейси: Что я могу порекомендовать для начала?

Джоу: Просто за то, что получаешь и продолжаешь получать обновления. Как источник «Меня интересует»: Какие ведутся обсуждения? Что обсуждается в процессе прямо сейчас? Когда выходят новые выпуски?

Заинтересованы в содействии

Трейси: Это сложно, многие из этих вещей происходят внутри, верно? Для тех людей, которые заинтересованы в том, чтобы внести свой вклад… Я не знаю, может ли кто-нибудь из вас, ребята, сделать это. Но вы всегда можете попинговать меня в Твиттере @ladyleet. И я могу дать вам доступ к каналу Slack. Канал Slack в основном предназначен для авторов. Так что, если вы действительно заинтересованы в том, чтобы внести свой вклад, и вы хотите иметь возможность начать разговор о вкладе, то это отличное место. Я думаю, что и для вопросов это отличное место. Мы также будем случайным образом публиковать обновления в Твиттере. Я не знаю, есть ли у кого-нибудь другие предложения.

Следите за новостями в Твиттере + свяжитесь с нами

Бен: Я бы посоветовал подписаться на всех этих людей, которых вы здесь видите, которые не являются мной (@ladyleet, @ncjamieson, @ mkldny, @niklas_wortmann) в Твиттере. Я знаю, что это серьезно каждый. Все здесь, кроме меня, на самом деле выводят гораздо больше контента, связанного с RxJS. Что касается: что происходит сейчас? или например: Что такое новые инструменты или различные методы? И тому подобное. Я думаю, может быть, я привык, а потом увлекся всякими другими вещами или чем-то еще. Но суть не в этом. Дело в том, что эти другие люди, которые участвуют в этой телеконференции, выдают огромное количество отличного материала, которому вы можете следовать. Время от времени я буду что-то чирикать, например, я подниму какую-то проблему или несколько запросов на вытягивание. Некоторые идеи, которые у меня есть, и прошу отзывов, вроде того. Но я делаю это очень редко. И даже приступая к этому разговору, я действительно очень хотел убедиться, что все услышали от блестящих людей из этой команды. Потому что мне часто кажется, что всякий раз, когда мы говорим о RxJS, я в конечном итоге довольно много болтаю о своих взглядах на вещи. Но все остальные здесь выкладывают феноменальное количество материала по этому поводу. Или они знают, где много этого удивительного материала. Так что я определенно буду следить за ними в Твиттере и внимательно следить за тем, что они пишут в статьях, и за тем, что они публикуют в своих блогах.

Трейси: Здесь все очень приветливы. Протяни руку! Мы всегда рады указать вам правильное направление. Или любой уровень вклада. Так что не напрягайся.

Блогролл: наши рекомендации:

Финал

Джоу: Верно. Просто услышь какие-то голоса в моем ухе. Сейчас мы немного опоздали.

Я хотел бы поблагодарить вас Трейси, Николаса, Моше и Бена, а также Яна-Никласа за то, что присоединились к нам со всего мира. Было приятно!

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

Большое тебе спасибо! И да, всем остальным снаружи: хорошего дня, ночи или доброго утра! Пока-пока

Трейси: спасибо, что пригласили нас

Бен: Спасибо!

Пожалуйста, поддержите #RxJS, анонимно сообщив об использовании (нажмите здесь, чтобы прочитать как)!