RxJSずは䜕か、なぜそれを知るこずが圹立぀のか

この蚘事では、RxJS 5+プロゞェクトマネヌゞャヌであるGoogle゚ンゞニアのBen Leshずのむンタビュヌの翻蚳を共有したす。



フロント゚ンド開発の広倧な䞖界には、倚くの興味深いツヌルがありたす。 私は実践的なこずを孊ぶための正しいアプロヌチを芋぀けるよう努めおおり、RxJSコミュニティの最も著名な代衚者の1人であるBen Leshず話をするこずにしたした。 RxJSに぀いおもっず知りたいず思ったのですが、なぜ初心者の開発者がリアクティブプログラミングの孊習に時間を費やすべきなのでしょうか。 さらに、プロゞェクトでRxJSを䜿甚する理由を理解したかったのです。 BenはRxJSの䜿甚方法を教えおくれ、このテクノロゞヌに぀いお孊ぶためのヒントを共有したした。







RxJSはどのような問題を解決したすか



プログラミングは垞に問題の解決策であり、特定の質問に察する答えを芋぀けるのに適したツヌルの怜玢です。 RxJSの堎合、解決すべきタスクは、さたざたなむベントを䜿甚しお非同期呌び出しを凊理する機胜です。 これは、さらに詳しく説明する䟡倀がありたす。



デヌタを䜿甚しお特定のアクションシヌケンスを生成する関数を䜜成しおいるずきに、この䜜業䞭に゚ラヌが発生したずしたす。 関数を䜿甚しおリク゚ストのシヌケンスを凊理するだけの堎合、゚ラヌを返すためにいく぀かのオプションの手順が実行される堎合がありたす。 ゚ラヌをすべおの関数に枡すのではなく、䞍芁になったすべおのAjaxリク゚ストを経由せずに゚ラヌを取埗しおビュヌを曎新できる必芁がありたす。



このスタむルで゚ラヌ凊理を敎理するためにプロミスが䜜成されるこずに気づくかもしれたせんが、RxJSはシヌケンシャルアクションを新しいレベルで操䜜するずいう抂念を採甚しおいたす。 Promisは単䞀の倀のみを凊理できるため、この構成のナヌスケヌスが制限されたす。 これに加えお、玄束をキャンセルするこずはできたせん。぀たり、フロヌを非垞にうたくブロックしおリ゜ヌスを浪費する可胜性がありたす䜎電力デバむスの重芁な考慮事項。



察照的に、RxJSは耇数の通信チャネルを提䟛するこずでこれらの制限を排陀する方法を提䟛したす。これにより、マルチステップむベントの凊理が簡玠化され、効率が向䞊したす。 さらに、RxJSを䜿甚するず、開発者はむベントを生成する必芁があるすべおのものを均䞀に衚珟できたす。 すべおが同じに芋える堎合、リク゚ストの結合、結合、実行のすべおを簡単に凊理できるこずがわかりたす。 これにより、RxJSは非垞に匷力なツヌルになりたす。



RxJSを孊ぶ理由



䞀方で、RxJSは、耇雑な䞀連のアクションを簡単に操䜜できる簡朔なコヌドに倉換できる匷力なツヌルです。



䞀方、この単玔さは倚くの蚀語メカニズムに基づいおおり、それらの研究には時間がかかりたす。 ただし、1行のコヌドで3セットのむベントを必芁ずするドラッグアンドドロップメカニズムを実装するようなこずができるこずに気付いたずき、埗られた知識は努力する䟡倀がありたす。



これにより、これらのむベントを䞀緒に接続しおマりスボタンのクリック、マりスの移動、ボタンのリリヌス、短く正確な1行のコヌドを取埗できたす。 通垞のアプロヌチでは、これには数十行のプログラムが必芁です。



RxJSを䜿甚する利点は䜕ですか



RxJSをコヌドに統合するずきに開かれる最も魅力的な機䌚の1぀は、RxJSを䜿甚すればするほど、このテクノロゞヌでできるこずです。 RxJSは、すべおのキュヌブが同じ圢状であるため、レゎが新しいデザむンの開発に最適であるずいう意味で、レゎコンストラクタヌず比范できたす。 同様に、芳察されたオブゞェクトはすべお同じように芋えるため、倚くの興味深い゜リュヌションを詊すこずができるため、それらを䜿甚しお䜕かを䜜成するこずは魅力的なタスクになりたす。 コヌド内で芳察されたオブゞェクトをより倚く䜿甚するほど、既存の構造に基づいお新しい䜕かを䜜成する機䌚が増えたす。



監芖察象のオブゞェクトを倧きなコヌドベヌスに統合するプロセスは䜕ですか



芳察されたオブゞェクトは、ほずんどすべおのアプリケヌションで䜿甚できたす。 チヌム開発に぀いお話しおいる堎合、これには時間がかかるこずがありたすが、次の条件が満たされおいる堎合、移行を簡玠化できたす。





誰もが自分のペヌスでそのようなこずを習埗したすが、最終的に、チヌムがRxですべおを行っおいるこずに気付いおも驚かないでください。 監芖察象のオブゞェクトを䜿甚しお特定のアクションを実行するず、それらはすべお同じように芋えたす。アプリケヌションに類䌌したオブゞェクトが衚瀺されるようになるず、それらを䜿甚する方がはるかに興味深いです。



オブザヌバブルオブゞェクトの䜿甚が掚奚されない状況はありたすか



もちろんありたす JSプログラミングでよくあるこずですが、単䞀のアクションを実行する別のむベントがある堎合、RxJSの䜿甚は少し奇劙です。 もちろん、ここではRxJSを適甚できたすが、やり過ぎになりたす。



ドラッグアンドドロップ操䜜は、RxJSが理想的に適しおいるタスクの優れた䟋です。 これは倚くのアクションを䌎うむベントであり、可胜であれば、その耇雑さは垞に軜枛するのに圹立ちたす。



オブザヌバブルオブゞェクトを䜿甚するタむミングを理解する方法



コンテキストに基づいお、監芖可胜なオブゞェクトを䜿甚するかどうかを決定するずきに圹立ちたす。 䟋





Rxオペレヌタヌの研究を決定するずき、どこから始めたすか



開始する挔算子のリストには、 map



、 filter



およびscan



含める必芁がありmap



。 その他の重芁な挔算子には次のものがありたす。





挔算子のリストを、最も頻繁に必芁な10個未満に絞り蟌むこずができたす。 もちろん、 pairwise



、 bufferCount



groupBy



など、実隓できる挔算子がありたす。 これらの䞍思議な挔算子は理由がありたすが、あたり頻繁には䜿甚されたせん。 ただし、これらの挔算子によっお実装されるアクションを実行する必芁があるたれなケヌスでは、自分でアクションを䜜成する方法に぀いお困惑する必芁はありたせん。



Reactのようなフレヌムワヌクを䜿甚しおRxJSを䜿い始めるのは簡単ですか



ReactでのRxJSの䜿甚は、Angularでの䜿甚ず非垞によく䌌おおり、完党に実装されおいたす。 Angularでは、芳察可胜なオブゞェクトはシステムの本栌的な゚ンティティであるため、Angularでこのテクノロゞヌを䜿甚するこずは非垞に簡単です。 ただし、これはcomponentDidMoun



tでRxJSにサブスクラむブし、componentWillUnmountでサブスクラむブ解陀するよりも耇雑ではありたせん。 このすべおの基瀎はAngularず同じ考え方ですが、Angularではこれらのメカニズムが組み蟌たれおいるだけで、Reactではすべおを手動で実装する必芁がありたす。



Rxのデバッグに関するヒントを共有できたすか



他のテクノロゞヌず同様に、Rxに぀いお孊習するず、経隓を積むに぀れおデバッグが容易になりたす。 デバッグが難しい状況がいく぀かありたす。 珟圚、Chrome開発チヌムず協力しおこれらの問題を解決しおいたす。



プログラマが盎面する兞型的な困難な状況は、 mergeMap



から䜕かを返し、 mergeMap



可胜なオブゞェクトを受け取るこずを期埅しおいる堎合ですが、これは監芖可胜なオブゞェクトではないこずがわかりたす。 次に、芳枬可胜なオブゞェクトであるず考えられるものを返した関数を芋る機䌚を埗たいず思っおいたすが、そうではありたせん。 これを瀺す方法は珟圚ありたせん。䜕が返されるかを正確に知るこずは䞍可胜なためです。



デバッグのヒントを次に瀺したす。





RxJSの将来に぀いおどう思いたすか



RxJSでは、泚意する䟡倀のあるいく぀かの倉曎が予想されたす。 そのため、いわゆる「lettable」オペレヌタがたもなく利甚可胜になりたす。 この抂念のおかげで、たずえば、オブゞェクト自䜓にmap



挔算子を䜿甚する代わりに、呌び出されたずきに別の関数を返すmap



関数がありたす。 この関数は、監芖察象オブゞェクトによっお䜿甚され、独自の挔算子を䜿甚しお実行されたのず同じアクションを実行したす。 たずえば、 observable.map.filter.scan



ようobservable.map.filter.scan



ものを曞く代わりに、 observable.compose(map, filter, scan)



曞くこずができたす。 他の関数を䜜成するための関数がある堎合、倚くの関数型プログラミングの可胜性が開かれるため、これは非垞に深刻で有甚な倉曎です。 この改善に関連するもう1぀の改善点は、パッケヌゞを構築するずきに未䜿甚のコヌドを削陀するこずですツリヌの揺れ。



珟圚、このような最適化はRxJSでは発生したせん。 すべおがプロトタむプです。 これにより、ポむントを介しおオペレヌタレコヌドを䜿甚できたすが、特定のプロゞェクトで実際に䜿甚されおいなくおも、すべおの゜ヌスコヌドが䜿甚されおいるず芋なされるため、システムはパッケヌゞのサむズを最適化できたせん。



RxJSの人気の高たりは、ReactずAngularにどのように圱響したすか



RxJSがよりアクセスしやすくなり、さたざたなプロゞェクトぞの統合が容易になっおいるため、フロント゚ンド開発者の間でより広く普及するこずを願っおいたす。 珟圚、RxJSの広範な採甚には2぀の障害がありたす。 1぀目は孊習の難しさです。 2番目はラむブラリのサむズです。 RxJSは長い間存圚しおいたしたが、メむンの開発チヌムが登堎する前は、それをプログラマに簡単でわかりやすい方法で提瀺する方法を理解するこずは困難でした。



Rxの䜜成者は玠晎らしい人々ですが、圌らは耇雑な甚語を䜿甚しおいるため、開発者のコ​​ミュニティからのプロゞェクトぞの泚意が欠けおいたす。 ただし、This Dotのような教育リ゜ヌスのおかげで、このすばらしいツヌルぞの関心が高たっおいたす。



RxJSのさらなる配垃を促進するために、私は珟圚、ラむブラリのサむズを瞮小するこずに取り組んでいたす。 Tiny Rx、たたはT-Rxをお楜しみに。 䞀蚀で蚀えば、このプロゞェクトでは24キロバむト圧瞮g-zipラむブラリをわずか3 Kbに枛らすこずができたした



RxJSの人気がどのように高たっおいるのか、より倚くのプログラマヌがRxJSを䜿甚しおいるのを芋おうれしいです。 さらに、誰もがRxJSに参加しお、この匷力で䟿利なツヌルの開発に実珟可胜な貢献をするこずができるず蚀わなければなりたせん。



RxJSの機胜に少し粟通しおいお、さらに孊習したい堎合は、 Rx Workshop 、 Intro to Rx 、 Thinking Reactively、およびRxJS in Depthを参照しおください 。



芪愛なる読者 プロゞェクトでRxJSを䜿甚しおいたすか



All Articles