Автор оригинала: FreeCodeCamp Community Member.
Кевином Гадяни
Что случилось с CSP?
Вы, вероятно, щелкнули эту статью, думая «что такое CSP?» Это Связывание последовательных процессов Отказ Все еще сбит с толку?
CSP – это метод связи между различными функциями (генераторами) в вашем коде с использованием общего канала.
Что в мире это значит? Лемме рассказывает это прямо. Есть эта концепция канала. Подумайте об этом, как очередь. Вы можете положить на него вещи и взять на себя.
Итак, с двумя функциями, вы можете иметь один добавлять вещи на канал (производитель), а другая выключаются и делают некоторые работы (потребитель).
Типичное расширенное использование было бы несколько производителей и один потребитель. Таким образом, вы можете контролировать данные, которые вы получаете, но вы можете иметь несколько вещей, которые вам дают вам.
В отличие от RXJS, эти каналы автоматически. Вы не получаете ценности Willy-Nilly, вы должны задать их.
Использование CSP.
Вот небольшой пример CSP, использующий суперпростую (и мертвую) библиотеку Channel4 :
CSP-каналы бегают асинхронно. Итак, как только эта пробел, синхронное «Готово» сообщение вообще входило в систему. Затем наши каналы выполняются в порядке.
Самое интересное для меня – это блокировка (но async) природа CSP. Обратите внимание, как мы создали третий Возьми
перед тем, как положить «C» на канал. В отличие от первых двух Возьми
Функции, третий не имеет ничего, что нужно брать. Как только что-то придет в канал, он немедленно его берет.
Также обратите внимание, потребители должны постоянно принимать вещи от канала до тех пор, пока этот канал не закрывается. Вот почему «D» никогда не регистрируется. Вам нужно определить другой Возьми
Чтобы схватить следующее значение с канала.
С наблюдателями вам дают значения, поэтому вам не нужно беспокоиться о том, чтобы вручную отталкивать их. Если вы хотите буфер этих значений, RXJS обеспечивает довольно много методов трубопровода для этой цели. Нет необходимости использовать CSP.
Вся концепция наблюдаемых в том, что все слушатели получают те же данные, как только наблюдатель звонит Следующий
Отказ С CSP, это как подход IXJS, где вы имеете дело с данными в кусках.
CSP мертв!?
Вы можете найти реализации CSP в Идти и Закрытие Отказ В JavaScript все, кроме пары библиотек CSP мертвы и даже тогда их аудитория маленькая?
Я узнал о CSP из Vincenzo Chianese’s Awesome Talk Отказ Он рекомендовал эту библиотеку высокой цели под названием JS-CSP Отказ К сожалению, это больше не поддерживается.
Исходя из того, что он сказал в своем договоре 2017 года, это казалось большой сделкой. Он говорил о том, как преобразователи собирались взорваться через несколько месяцев и как JS-CSP уже поддерживал их.
Похоже, что CSP может принципиально изменять, как вы разработали Async-приложения в JavaScript. Но никто из этого никогда не случился. Преобразователи умерли; Заменены библиотеками, такими как RXJS, и шумиха вокруг CSP растворилась.
Винцанцо отметил, как CSP является целым «более нешелым уровнем выше. Он прав. Власть, имеющая несколько функций, взаимодействующих асинхронно, невероятно.
Обещания, их нетерпеливой природой, даже в том же балкомпаке. Мало ли он знал, что последние несколько библиотек CSP в конечном итоге окажутся поддерживать обещания под капюшоном?,
CSP Альтернатив: Redux-Saga
Если вы когда-либо использовали Redux-Saga, идеи и концепции вокруг CSP, вероятно, звучат знакомы. Это потому, что они есть. Фактически, Redux-Saga является реализацией CSP в JavaScript; Самый популярный, безусловно.
Есть даже концепция «каналов» в Redux-Sagas: https://github.com/redux-saga/redux-saga/blob/master/docs/advanced/channels.md.
Каналы получают информацию от внешних событий, буферных действий в магазин Redux и общайтесь между двумя сагами. Это так же, как они используются в CSP с тем же Возьми
и поставить
Функции.
Довольно круто, чтобы увидеть фактическую реализацию CSP в JavaScript, но странно очень мало заметила. Это показывает, как мало CSP снял перед смертью.
CSP Alternative: Redux-наблюдаемый
Возможно, вы слышали о чем-то, называемом redux-наблюдаемым. Это аналогичная концепция CSP и Redux-Saga, но вместо императивного стиля генераторов требуется функциональный подход и использует трубопроводы RXJS, называемые «эпографическими».
В Redux-наблюдаемом, все происходит по двум предметам: действие $
и Государство $
Отказ Это ваши каналы.
Вместо того, чтобы вручную принимать и положить, вы слушаете конкретные действия в качестве потребителя действия или государственного канала. Каждый эпос обладает способностью быть производителем, отправив действия через трубопровод.
Если вы хотите создать очередь в режиме ожидаемого redux, точно так же, как CSP, это немного сложнее, так как для этого нет оператора, но это полностью возможно.
Я создал замену, которая делает только что:
По сравнению с нашим предыдущим примером CSP, это то, что вы можете ожидать, чтобы увидеть:
Пример требует только RXJS и все в одном файле для простоты. Как видите, это намного сложнее, чтобы покинуть предметы в RXJS так же, как вы можете с CSP. Это совсем возможно, но требует гораздо большего количества кода.
Лично, я хотел бы увидеть RXJS, добавить оператора, как Буфер, когда
Это позволяет вам отключить отдельные предметы вместо всего буфера. Тогда вы сможете выполнить стиль CSP в Redux-наблюдаемый намного проще.
Заключение
CSP была прохладной концепцией, но она мертва в JavaScript. Redux-Saga и Arequx-наблюдаемые являются достойными альтернативы.
Даже с возможностью интеграции с библиотеками преобразователя RXJS все еще имеет четкую ногу. Это массивное сообщество преподавателей и производственных приложений, трудно конкурировать.
Вот почему я думаю, что CSP умер в JavaScript.
Больше читается
Если вам понравилось то, что вы читаете, пожалуйста, оформируйте оформление моих других статей на аналогичных темах открытия глаз: