CSP vs RxJS: það sem þú veist ekki.

Hvað varð um CSP?

Ljósmynd af James Pond á Unsplash

Þú smelltir líklega á þessa grein og hugsaðir „hvað er CSP?“ Það er að koma fram röðferlum. Ennþá rugluð?

CSP er aðferð til að hafa samskipti á milli mismunandi aðgerða (rafala) í kóðanum þínum með samnýttri rás.

Hvað í heiminum þýðir það? Lemme segðu þér það beint. Það er þetta hugtak um rás. Hugsaðu um það eins og biðröð. Þú getur sett efni á það og tekið efni af því.

Svo með tveimur aðgerðum geturðu haft eitt að bæta við efni á rásina (framleiðandi) og annað að draga hluti af og vinna smá vinnu (neytandi).

Dæmigert tilvik um háþróaða notkun væru margfeldi framleiðendur og einn neytandi. Þannig geturðu stjórnað gögnum sem þú færð en þú getur haft marga hluti sem gefa þér það.

Ólíkt RxJS eru þessar rásir sjálfvirkar. Þú færð ekki gildi viljalaust, þú verður að biðja um þau.

Notkun CSP

Hér er lítið CSP dæmi sem notar ofur einfalda (og dauða) bókasafnið Channel4:

CSP rásir ganga ósamstilltur. Svo um leið og þetta keyrir skráist samstillta „DONE“ skilaboðin fyrst. Þá eru rásarmenn okkar teknir af stað í röð.

Það áhugaverðasta fyrir mig er að loka (en ósamstilltur) eðli CSP. Taktu eftir því hvernig við bjuggum til þriðju töku áður en þú settir „C“ á rásina. Ólíkt því að fyrstu tvær taka aðgerðirnar, þá þriðju hefur ekki neitt að taka. Þegar eitthvað kemur inn á rásina tekur það það strax.

Athugaðu einnig að neytendur þurfa stöðugt að taka hluti af rásinni þar til sú rás lokast. Þess vegna er „D“ aldrei skráð. Þú verður að skilgreina aðra töku til að ná næsta gildi af rásinni.

Með sýnilegum hlutum er þér gefin gildi svo þú þarft ekki að hafa áhyggjur af því að draga þau handvirkt af. Ef þú vilt stuðla að þessum gildum, þá býður RxJS töluvert af leiðsluaðferðum fyrir þennan tilgang. Engin þörf á að nota CSP.

Allt hugtakið á bak við athuganlegar upplýsingar er að allir hlustendur fá sömu gögn um leið og áhorfandinn hringir næst. Með CSP er það eins og IxJS nálgunin þar sem þú ert að fást við gögn í klumpum.

CSP er dauður !?

Þú getur fundið CSP útfærslur í Go and Closure. Í JavaScript eru öll nema par CSP bókasöfn látin og jafnvel þá eru áhorfendur þeirra litlir.

Ég komst að CSP frá frábæru erindi Vincenzo Chianese. Hann mælti með þessu hágæða bókasafni sem kallast js-csp. Því miður er það ekki lengur haldið.

Miðað við það sem hann sagði í ræðu sinni 2017 virtist það vera mikill samningur. Hann talaði um hvernig transducers ætluðu að springa eftir nokkra mánuði og hvernig js-csp hafði þegar stuðning við þá.

Það leit út fyrir að CSP gæti í grundvallaratriðum breytt því hvernig þú þróaðir ósamstillta forrit í JavaScript. En ekkert af því gerðist nokkru sinni. Kveikjur dóu í burtu; skipt út fyrir bókasöfn eins og RxJS, og eflingin í kringum CSP leyst upp.

Vincenzo tók eftir því hvernig CSP er allt „stigi hærra en loforð“. Hann hefur rétt fyrir sér. Krafturinn sem þú færð með margar aðgerðir í samstillingu ósamstilltur er ótrúlegur.

Loforð, að eðlisfari sínu, eru ekki einu sinni í sama kúluvarpi. Lítið vissi hann að síðustu CSP bókasöfn myndu enda með því að styðja loforð undir húddinu .

CSP val: Redux-Saga

Ef þú hefur einhvern tíma notað Redux-Saga hljóma hugmyndir og hugtök í kringum CSP líklega kunnugleg. Það er vegna þess að þeir eru það. Reyndar er Redux-Saga framkvæmd CSP í JavaScript; vinsælasti langstærstur.

Það er meira að segja hugtakið „rásir“ í Redux-Sagas:
https://github.com/redux-saga/redux-saga/blob/master/docs/advanced/Channels.md

Rásir fá upplýsingar frá utanaðkomandi atburðum, biðminniaðgerðir í Redux versluninni og hafa samskipti á milli tveggja sagna. Það er á sama hátt og þeir eru notaðir í CSP með sömu taka og setja aðgerðir.

Frekar flott að sjá raunverulega útfærslu á CSP í JavaScript en undarlega mjög fáir hafa tekið eftir því. Það sýnir þér hversu lítið CSP tók af áður en hann dó.

CSP val: Redux-sýnilegt

Þú hefur kannski heyrt um eitthvað sem kallast Redux-Observable. Þetta er svipað hugtak og CSP og Redux-Saga, en í staðinn fyrir nauðsynlegan stíl rafala, tekur það virkan hátt og notar RxJS leiðslur sem nefndar eru „epics“.

Í Redux-Observable gerist allt með tveimur greinum: aðgerð $ og ríki $. Þetta eru rásirnar þínar.

Í stað þess að taka og setja handvirkt, hlustar þú á sérstakar aðgerðir sem neytandi aðgerðar eða ríkisrásar. Hvert epos hefur getu til að vera framleiðandi með því að senda aðgerðir í gegnum leiðsluna.

Ef þú vilt byggja biðröð í Redux-Observable alveg eins og CSP, þá er það aðeins flóknara þar sem enginn rekstraraðili er tiltækur í þessu skyni, en það er alveg mögulegt.

Ég bjó til svar sem gerir það bara:

Í samanburði við fyrri CSP dæmi okkar, þetta er það sem þú getur búist við að sjá:

Dæmið krefst aðeins RxJS og allt er í einni skrá til að einfalda það. Eins og þú sérð er mun erfiðara að setja biðröð í röð í RxJS á sama hátt og þú gætir gert með CSP. Það er alveg mögulegt en krefst miklu meiri kóða.

Persónulega myndi ég elska að sjá RxJS bæta við rekstraraðila eins og biðminni Þegar það gerir þér kleift að skipta út einstökum hlutum í stað alls biðminni. Þá gætirðu náð CSP-stílnum í Redux-Observable miklu auðveldara.

Niðurstaða

CSP var flott hugtak en það er dautt í JavaScript. Redux-Saga og Redux-Observable eru verðugir kostir.

Jafnvel með hæfileikann til að aðlagast transducer bókasöfnum, RxJS hefur enn skýra leg-up. Það er gríðarlegt samfélag kennara og framleiðsluforrita sem gerir það erfitt að keppa.

Þess vegna held ég að CSP hafi dáið í JavaScript.

Meira lesa

Ef þér líkar vel við það sem þú lest, vinsamlegast kíktu á aðrar greinar mínar um svipuð augu sem opna augu:

  • Redux-sjáanlegur getur leyst vandamál ríkisins
  • Redux-hægt að sjá án Redux
  • Svarhringingar: The Definitive Guide
  • Loforð: Endanleg handbók