ホーム

スタッフブログ

2021年6月8日

非同期処理の話

こんにちは

シナジーデザイン プログラマー / マネージャーの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)にしろ、

 

どうやって使うかの話は山ほどあるのに、

何故使うのか という話は全然聞かないですよね。

そこを言語化するニーズはあるな、と感じます。

 

求人バナー

このページの上部へ戻る