ホーム

スタッフブログ

2021年5月28日

開発手記(3-2)デキテル・お客さま管理ツールリニューアル

こんにちは

シナジーデザイン プログラマー / マネージャーのAです。

 

前回、

デキテルのお客様管理ツール(通称ログビューワー)の

リニューアルの話をしました。

ボリューミーな内容なので、複数回に分けて書いています。

 

今回は

「非同期処理の徹底」

の話です。

 

前回を読んでない方はこちらからどうぞ

https://syde.jp/w/archives/10286.html

 

 

非同期処理 とは?

 

PHPやJavaScriptでは、

「同期」と「非同期」の2つの書き方があります。

簡単にいうと…

 

【同期】

A → B → C

 

【非同期】

A →
B →
C →

 

という感じ。

図でもなんとなく分かるように、

非同期の方が、基本的に早いです。

 

 

今回のリニューアルには、非同期処理は必須。

 

今のログビューワーが遅く感じる大きな理由は

「見たいデータを見るために、見たくないデータの読み込みを待たなくてはいけない」

ことにあります。

 

・お客さまデータを見るために、指標データを読み込まなくてはいけない。

・スタッフデータを見るために、お客さまデータを読み込まなくてはいけない。

 

といった同期処理が、ログビューワーの表示を遅くしていました。

 

であれば、

全て非同期にしてしまえば、速いはずですね。

ただ、コレがものすごく大変でした。

 

 

非同期処理は難しい。

 

大変だった理由はシンプルで、

書くのがとても難しかった

ことにあります。

 

難しさの理由は

非同期の中に、同期が発生するから

でした。

先ほどの図のように、シンプルな処理はそうそうありません。

 

例えば…

「A と C は並列 で良いけど B は A の後じゃないといけない」

的な感じなんですが、

これが複数積み重なると

 

A — — — E — — H — —
— B —  F — — — I — L
C  — D — — G — J — K

みたいな感じになります。

 

AとCが終わるのを待って

Bが終わるのを待って

D, F, E はBが終わるのを待って…  のように

複数の非同期処理を管理し、適切なタイミングで走らせる。

これは大変な苦労でした。

 

 

ログビューワー、だいぶ早くなったと思います。

 

苦労の話はもういいとして、

今回のリニューアルでは

非同期に出来るところは全て非同期にしました。

理論的な限界まで非同期にしました。

 

おかげで、ずいぶん早くなったように感じます。

 

 

同期・非同期の使い分けができると、世界が広がる。

 

個人的にですが

最近のJavaScript の進化を追ってると、

「同期・非同期をカンタンに書く」が1つのコンセプトとしてあるように思います。

 

モバイル端末の普及が爆発的に進む

→ 低速度ネットワークでWEBを見る機会が増える

→ ページを表示するために時間が掛かる

→ 少しでも早くページを見せたい

→ 同期・非同期を使い分けよう

 

という流れでしょうか。

素のJavaScriptでも、各FWでも、

同期・非同期を使い分けることが前提、な気がします。

 

コードが読みづらい理由の1つに

「同期・非同期の理解が浅い」

ことは間違いなくあると思うので、

ぜひ、積極的に情報収集して、知見を得ると良いと思います。

 

 

以上です。

求人バナー

このページの上部へ戻る