こんにちは
シナジーデザイン プログラマー / マネージャーのAです。
今回は
部下から直接受けた疑問に、ブログで答えてみようと思います。
「非同期通信がわからない」 とのことです。
少し掘り下げると
・どこから進めればいいのかわからない
・情報と情報が全然つながらない
・何か書籍を購入するなどして、体系的に学ぶべきなのか?
とのことでした。
質問に答える前に、1つ前提を設けようと思います。
前提)よくわかんなくて当然
多分、非同期通信に関する情報の何を見聞きしても、
「ふーん、そうなんだ」で終わる感じじゃないでしょうか。
事実が事実として頭に残るだけで、
「なるほど、だから◯◯が出来て便利なのね」という”ありがたみ” や ”感動” が無い。
だから、彼女の言うように、情報と情報が繋がらない。
ということで、
非同期通信のありがたみ を話してみようと思います。
ありがたみ(1)早い。
A , B, C という処理があったとして
同期 / 非同期 の違いを物凄くシンプルに図で表すと
【同期】
A –> B –> C –>
【非同期】
A –>
B –>
C –>
となります。
この場合だと、非同期の方が3倍早いです。
簡素ですが、ただこれだけのことです。
—
もう一つたとえ話を。
日常生活の中にも、非同期は沢山あります。
例えば
「ご飯を炊いてる間におみそ汁を作る」行為は、非同期です。
早くご飯が食べたい => 非同期で処理しようと、
わざわざ考えてやってるわけです。
「ご飯を食べるタイミングなんていつでも良いよ」と思ってる人には、
「ご飯を炊いてる間におみそ汁を作る」厄介さが面倒だろうな、と思います。
ありがたみ(2)処理同士を「疎」に出来る。
語弊はあるんですが
同期 よりも 非同期 の方が「疎」に書けます。
「疎(そ)」という言葉、プログラミングでは重要なキーワードなので、
是非憶えておいてください。
(「疎」・・・互いが互いに影響しない事。「密」の反対。)
もう一度さっきの図を見て見ましょう。
【同期】
A –> B –> C –>
【非同期】
A –>
B –>
C –>
同期の場合、
「A」の処理で事故ると、「B」も「C」も動きません。
でも、非同期の場合
「A」の処理で事故ったとしても、「B」も「C」も動きます。
勝手に「疎」になっていくのは、非同期の良い所です。
—–
おみそ汁の話で例えると
鍋でお米を炊いて、鍋でおみそ汁を作る人の場合、
ご飯を炊いてる途中に鍋が壊れたら、おみそ汁は作れません。
でも
炊飯器でお米を炊いて
非同期に、鍋でおみそ汁を作る人であれば、
炊飯器が壊れようが、おみそ汁はキチンと出来上がります。
非同期の概念自体は簡単。難しいのは、使うタイミング。
ココまで非同期のありがたみを説きましたが、
非同期の概念自体はシンプルです。
「別で同時にやっておく」程度のものです。
何故難しく感じるのか。
利用シーンが見えなくて、イメージし辛いからだと思います。
実は、
先日の社内ツール改修では、非同期処理を何度も何度も使っています。
同期的に出すとどうしてもパフォーマンスが落ちたので、
非同期で、色んな処理を同時に行いながら、効率よく、行っています。
実際のコードを見てみると、イメージが強烈に湧くかなと思います。
最後に、質問に答えます
どこから進めればいいのかわからない
jQuery.ajax を async: false で、ループの中で使ってみてください。
そのあとで
jQuery.ajax を async: true で、ループの中で使ってみてください。
多くの処理を一度に走らせる経験を積みましょう。
書籍を買った方が良いのか
特に不要ですね
体系的に学ぶべきか
今の時点では不要です。情報吸収のノイズになっちゃうと思います。
以上です。
余談ですが
OOP(Object Oriented Programming)にしろ、
SPA(Single Page Application)にしろ、
PWA(Progressive Web Application)にしろ、
SSR(Server Side Rendering)にしろ、
どうやって使うかの話は山ほどあるのに、
何故使うのか という話は全然聞かないですよね。
そこを言語化するニーズはあるな、と感じます。