0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

121.ブラウザとJavascriptについて,122.非同期処理

Last updated at Posted at 2022-09-07

覚えておくべきごく

スレッド

連続して実行される1本の処理のこと
今回のスレッドは
*Main Thread:Javascriptの実行とレンダリングを行う
*Service Worker:
*WebWorker

レンダリング

データ(ここでいうとソースコード)をもとに何らかを表示させるということなので
rendering(レンダリング)」意味は表現に近い。
今回の意味合いは
javascriptのソースコードを用いてブラウザに表示させるという意味で使われる

FPS

FPSとは1秒あたり画面の更新頻度のこと
例えば
60fpsだと
1秒間で60回画面更新になります
ちなみに
*24fps 遅いけど、重い処理はこのくらいかな
*60fps なめらか
ちなみにMaxは120くらいらしい
<参考>
https://qiita.com/umi_kappa/items/d9656f6083fbee6add70

同期処理の問題

同期処理ではメインスレッドでコードが順番に実行される
同期処理では1つの処理が完了するまで次の処理には進まない
つまり、前に重い処理がある場合は次の処理に進むまで何もできません。

同期処理と非同期処理の比較

①5秒間かかる処理です

②ボタンをクリックします

// ①5秒間かかる処理です
function sleep(ms) {
  const startTime = new Date();
  while (new Date() - startTime < ms);
  console.log('sleep done');
}
// ②ボタンをクリックします
const btn = document.querySelector('button');
btn.addEventListener('click', function(){
  console.log('button clicked');
});

sleep(5000);

5秒間ぐるぐるだよ

スクリーンショット 2022-09-07 17.25.31.png

やっとボタン押せた、、、

スクリーンショット 2022-09-07 17.26.32.png

待機時間解決方法

*WEBAPIを指定する
1.setTimeout<実はsetTimeoutもAPI>
2.Promiseなど //次回

setTimeoutとは?

ー秒まって実行する関数
グローバルの setTimeout() メソッドは、時間切れになると関数または指定されたコードの断片を実行するタイマーを設定します。

使い方

setTimeout(コールバック関数, -秒後に実行)

// 例
setTimeout(function() {
	sleep(3000)
}, 2000)

こうすると、
1.まっている2秒間だけ、次の処理(ここでいうとボタンを押すこと)ができる
2.Timeoutが終わり3秒かかるsleep(3000)が始まり、再び次の処理ができなくなる
3.sleep(3000)が終わったのでボタンが押せるようになる
ということ

つまり非同期処理とは

一時的にメインスレッドから切り離して処理を行うこと

APIの定義をもう一度見直そう

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?