Web Worker
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฉ์ธ ์ค๋ ๋์ ๋ณ๋๋ก ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํ ์ ์๊ฒ ํ๋ ์์ ์ด๋ค.
ex) ๋ชจ๋ํฐ๋ง ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
โก๏ธ 1์ด๋ง๋ค ๋ฉ์ธ ์ค๋ ๋์์ ์ค์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ง์์ง์๋ก ์ฑ์ ๋๋ ค์ง๊ณ UI๋ ์ง์ฐ๋๋ค.
๐ผMain Thread
- ๋ธ๋ผ์ฐ์ ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํํ๋ UI ์ค๋ ๋
- Web Worker๋ฅผ ์์ฑํ๊ณ ํต์ ์ ์ฃผ๋
๐ญWorker Thread
- ๋ฉ์ธ ์ค๋ ๋๊ฐ ์์ฑํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋
- ๋ ๋ฆฝ๋ ํ๊ฒฝ์์ ์์ ํ๋ฉฐ, ๋ฉ์ธ ์ค๋ ๋์ ๋ฉ์์ง ๊ตํ์ผ๋ก ํต์
1. Web Worker ์์ฑ
- ์ค์ ๋ ์๊ฐ(1์ด)๋ง๋ค refresh token์ Main Thread๋ก ๋ณด๋ด๋ Web Worker์ด๋ค.
- selft๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ Worker ๊ฐ์ฒด ์ค์ค๋ก์๊ฒ ๋ค์ด์ค๋ message๋ฅผ Listenํ ์ ์๊ฒ ๋ง๋ค ์ ์๋ค.
const intervalWorker = new Worker(
URL.createObjectURL(
new Blob(
[
`self.onmessage = (evt) => {
const { refreshToken } = evt.data;
setInterval(() => {
postMessage({ refreshToken });
}, motionDetectTime);
};`
],
{
type: `application/javascript`
}
)
)
);
2. Main Thead์์ Worker Thread๋ก ๋ฐ์ดํฐ ์ ๋ฌ
- postMessge๋ฅผ ํตํด Worker Thread์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค.
- motionDetectTime: ์ฃผ๊ธฐ์ ์์ ์ ๊ฐ๊ฒฉ(ms)
- refreshToken: ์ฌ์ฉ์ ์ธ์ฆ ํ ํฐ
intervalWorker.postMessage({
motionDetectTime: 1000,
refreshToken: localStorage.getItem(`refreshToken`)
});
3.Worker Thread์์ ๋ฉ์ธ์ง ์ฒ๋ฆฌ
- refresh token ์์ ๊ฒฝ์ฐ: ์์ปค ์ข ๋ฃ & ๋ก๊ทธ์์
- ๋ชจ์ ์ด ๊ฐ์ง๋๋ ๊ฒฝ์ฐ: refresh token ๋ณ๊ฒฝ๋์์ ๊ฒฝ์ฐ ์์ปค ์ข ๋ฃ
- ๋ชจ์ ์ด ๊ฐ์ง๋์ง ์๋ ๊ฒฝ์ฐ: ์์ปค ์ข ๋ฃ
intervalWorker.onmessage = evt => {
const refreshToken = localStorage.getItem(`refreshToken`);
if (!refreshToken || !checkMotionFunc()) {
intervalWorker.terminate();
if(!refreshToken) logout();
} else {
if (evt.data.refreshToken !== refreshToken) {
intervalWorker.terminate();
}
}
};
const autoLogoutTime = 1200000;
const checkMotionFunc = () => {
const motionTime: number = Number(localStorage.getItem(`motionTime`));
if (null === motionTime || autoLogoutTime < Date.now() - motionTime) {
sessionStorage.setItem(`noMotion`, String(true));
logout();
return false;
} else {
return true;
}
};
const checkMotionEventFunc = () => {
if (!checkMotionFunc()) return;
localStorage.setItem(`motionTime`, String(Date.now()));
};
'โ๏ธFront-End > ๐JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [JS] OffscreenCanvas (0) | 2024.12.26 |
|---|---|
| [JS] ResizeObserver (0) | 2024.12.09 |
| [JS] var, let, const (0) | 2024.02.22 |
| [JS] JavaScript Engine (0) | 2023.10.23 |
| [JS] ECMAScript (0) | 2023.10.17 |