画像処理など重たい処理は非同期で走らせてブラウザが固まらないようにするのが定石だと思いますが、
この考え方に違和感があります。
少なくとも私は「重たい処理(CPU負荷の高い処理)」だから非同期処理にするのではなく、「時間がかかる処理」だから非同期処理にします。
「CPU負荷の高くても0.1秒で終わる処理」なら問題ありませんし、Fetch APIのように「CPU負荷は低いが時間がかかる処理」にも非同期処理は適用されます。
ユーザが何もできない時間を短くすることが重要です。
メインスレッド(JSのシングルスレッド)でそれが実行されるのだったら、
Web Workers API 以外は、シングルスレッドと認識しています。
その重い処理がメインスレッドで実行される訳ですから、他のユーザー操作にブラウザがその処理が終わるまで反応しなくなってしまいますよね?
CPU負荷の高い処理が実行されるのなら、当然、他の処理も重たくなります。
しかし、その場合は、重たい処理を小分けし、処理の合間に setTimeout
でアイドル時間を作って、CPU負荷を軽減する等、非同期処理とは別のベクトルで対策をとるべきだと私は思います。
ユーザが行う処理に影響するほど「時間がかかる処理」なら非同期処理にすべきですが、非同期処理にすることでCPU負荷が下げられるとは思えません。
(最近のCPUはマルチコアなので、CPU負荷の高い処理だけ別のコアに処理を逃がす対策は考えられますが、私はそれを実現するAPIを知りません…。)
Re: ymt123 さん
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。