OffscreenCanvas
Canvas API๋ ๋ณดํต ๋ฉ์ธ ์ค๋ ๋์์ ์คํํ๋ค.
์บ๋ฒ์ค ์ ๋๋ฉ์ด์ ๊ณผ ๋ ๋๋ง๊ณผ ๊ด๋ จ๋ ๊ณ์ฐ์ ๋ฉ์ธ ์ค๋ ๋์ ๋ถํ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ๋ ํ๋ค.
์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ํ๋ฉด ๋ฐ์์ ๋ ๋๋งํ ์ ์๋ ์บ๋ฒ์ค๋ฅผ ์ ๊ณตํ๊ณ DOM๊ณผ Canvas API๋ฅผ ๋ถ๋ฆฌํ์ฌ
canvas ์์๊ฐ DOM์ ์์ ํ ์์กดํ์ง ์๋๋ก ํ๋ค.
1. HTML์์ <canvas> ์์ ์์ฑ
<canvas id="container"></canvas>
2. ์น ์์ปค ์์ฑ ๋ฐ OffscreenCanvas ์ ๋ฌ(main.js)
postMessage๋ฅผ ์ฌ์ฉํ ๋ transfer ์ต์ ์ ๋ณด๋ด์ผ ํ๋ ์ด์ ๋ OffscreenCanvas ๊ฐ์ฒด๋ฅผ ์น ์์ปค๋ก ์์ ๊ถ์ ์ด์ ํ๊ธฐ ์ํด์๋ค. JavaScript์์ ๊ฐ์ฒด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณต์ฌ๋ก ์ ๋ฌ๋๋ค. ํ์ง๋ง OffscreenCanvas๋ ๋ณต์ฌํ ์ ์๊ณ , ๋์ ์ ์กํด์ผ๋ง ๋ค๋ฅธ ์ค๋ ๋์์ ์ฌ์ฉํ ์ ์๋ค.
- ์์ ๊ถ ์ด์ ์ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ์ง ์๊ณ , ๋ฉ๋ชจ๋ฆฌ์ ์์์ ์ง์ ์ ๋ฌํ์ฌ ์์ ํจ์จ์ฑ์ ๋์ธ๋ค.
- ์์ ๊ถ์ด ์ด์ ๋๋ฉด, ๋ฉ์ธ ์ค๋ ๋์์๋ ํด๋น OffscreenCanvas๋ฅผ ๋ ์ด์ ์ฌ์ฉํ ์ ์๊ณ , ์์ปค์์๋ง ์ฌ์ฉํ ์ ์๋ค.
const worker = new Worker(new URL('worker.js', import.meta.url));
const canvas = document.createElement('canvas');
const offscreen = canvas.transferControlToOffscreen();
worker.postMessage({ offscreen }, [offscreen]);
worker.onmessage = event => {
console.log(event);
}
3. ์น ์์ปค์์ OffscreenCanvas๋ก ์์ ์ํ(worker.js)
self.onmessage = (event) => {
const { offscreen } = event.data;
const ctx = offscreen.getContext('2d');
ctx.fillStyle = 'gray';
ctx.fillRect(0, 0, 200, 50);
}'โ๏ธFront-End > ๐JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [JS] Callback, Promise, Async/await (0) | 2026.01.07 |
|---|---|
| [JS] ์ฟ ํค/ ์ธ์ / JWT / Access Token, Refresh Token ์ธ์ฆ ๋ฐฉ์ (0) | 2026.01.06 |
| [JS] ResizeObserver (0) | 2024.12.09 |
| [JS] Web Worker (0) | 2024.11.18 |
| [JS] var, let, const (0) | 2024.02.22 |