[JS] OffscreenCanvas

 

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