📚

非同期処理と同期処理の違いについて

2023/08/31に公開

はじめに

フロントエンドで理解が必須の、非同期処理と同期処理について書いていきます。

非同期処理と同期処理の関係

同期処理

ある処理の完了を待たずに、別の処理から実行していく通信方法になります。
サンプルコードで解説します。

const testMethod = () => {
    console.log('1');
    setTimeout(() => {
        console.log('2')
    }, 1000);
    console.log("3");
}
testMethod();

出力結果は以下になります。

1
3
2

このように、時間のかかる処理を待たずに、別の処理を実行していくのが非同期処理となります。

同期処理

同期処理は、非同期処理の逆で、順番に処理を実行していく通信方法になります。
サンプルコードは以下です。
今回は、asyncとawaitを使って、同期処理を実現しています。

const testMethod = async () => {
    console.log("1");
    console.log("2");
    console.log("3");
}
testMethod();

実行結果は以下になります。

1
2
3

このように、同期処理は、上から順番に処理を行なっていきます。

使いこなすためのベストプラクティス

非同期関数:
非同期処理を行う関数は、必ず async キーワードを付けて定義し、await を使用して非同期操作の完了を待つようにします。これにより、コードの意図が明確になり、エラーハンドリングも容易になります。

Promiseとコールバック:
コールバックベースの非同期処理は、コードのネストが深くなる可能性があるため、可能な限り Promise を使用して処理をチェーンすることを推奨します。

非同期のネストを避ける:
非同期処理のネストを深くしないように注意し、必要に応じて Promise.all や async/await を使用して複数の非同期操作を同時に待機することで、コードの複雑さを抑えることができます。

エラーハンドリング:
非同期処理ではエラーハンドリングが重要です。try/catch ブロックを使用して非同期操作の中で発生するエラーを適切にキャッチし、処理するようにします。

パフォーマンスの最適化:
非同期処理の適切な活用により、アプリケーションのパフォーマンスを向上させることができます。ただし、過剰な非同期処理は逆にオーバーヘッドを引き起こす可能性があるため、バランスを保つことが重要です。

非同期処理と同期処理の組み合わせにより、アプリケーションの効率性とユーザーエクスペリエンスを向上させることができます。適切な場面で使い分けることで、柔軟で高性能なコードを実現できます。

Discussion