Web Worker๋
single-threaded JS์ ํ๊ณ
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ํตํด UI๋ ๋ธ๋ฝ๋์ง ์๊ณ ์คํ๋ ์ ์๋ค. ๊ทธ๋ ๋ค๋ฉด, Web API๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ผ๋ฐ ์ฝ๋๊ฐ CPU๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ์ด๋จ๊น?
์์ ์ฝ๋๊ฐ ์คํ๋๋ ๋์, ๋ค๋ฅธ ์ฝ๋๋ค์ ์คํ๋ ์ ์์ผ๋ฏ๋ก ํ์ด์ง๊ฐ ๋ฉ์ถฐ์ง๋ ํ์์ด ๋ฐ์ํ๋ค.
์ด๊ฒ์ด single-thread์ธ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ๊ณ์ด๋ค. HTML5์ ์ถ๊ฐ๋ web worker๋ ์ด๋ฌํ ํ๊ณ๋ฅผ ํด์์์ผ์ค๋ค.
Web Worker๋ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์๋ ์๋ก์ด thread์์ parallelํ๊ฒ ์คํ๋๋ค. ์๋นํ ์ค๋ ์๊ฐ ๋์ ๊ณ์ฐ์ด ํ์ํ ์์ ์ web worker๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๊ณ์ฐํ๋๋ก ํ๋ค๋ฉด, UI๊ฐ ๋ธ๋ฝ๋๋ ์ผ์ ๋ฐ์ํ์ง ์๋๋ค.
Web Workers์ ์ข
๋ฅ
web worker๋ ์ธ ์ข ๋ฅ๊ฐ ์๋ค.
Dedicated Workers web worker๋ฅผ ํธ์ถํ ์คํฌ๋ฆฝํธ์์๋ง ์ ๊ทผํ ์ ์๋ค.
Shared Workers ๊ฐ์ origin์์ ๋์ํ๋ ์ฌ๋ฌ ํ๋ก์ธ์ค์์ ์ ๊ทผํ ์ ์๋ค. ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ํญ, iframe, ์ฌ์ง์ด๋ worker์์๋ ์ ๊ทผํ ์ ์๋ค.
Service Worker event driven ์์ปค์ด๋ค.
Web Workers ๋์ ๋ฐฉ์
์น ์์ปค๋ ๋ธ๋ผ์ฐ์ ์์ ๋ ๋ฆฝ๋ ์ค๋ ๋์์ ๋์ํ๋ค. ๋ฐ๋ผ์ ์น ์์ปค๋ก ๋์ํ ์ฝ๋๋ฅผ ๋ค๋ฅธ ํ์ผ์ ์ ์ด์ผ ํ๋ค.
์น ์์ปค๋ฅผ ๋ง๋๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
worker.js ํ์ผ์ด ์กด์ฌํ๊ณ , ์ ๊ทผ๊ฐ๋ฅํ๋ค๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ์๋ก์ด ์ค๋ ๋๋ฅผ ๋ง๋ค์ด๋ด์, ๋น๋๊ธฐ์ ์ผ๋ก ํด๋น ํ์ผ์ ๋ค์ด๋ก๋ํ๋ค.
์์ฑ๋ ์น ์์ปค๋ฅผ ์์ํ๊ฒ ํ๋ ค๋ฉด, postMessage
๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
์น ์์ปค์์๋ onmessage
๋ฉ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ ์๋ค. ๋ฉ์ธ์ง๋ event ๊ฐ์ฒด์ data ์์ฑ์ ๋์ด์ค๊ฒ ๋๋ค.
์น ์์ปค์์๋ postMessage๋ก ๋ฉ์์ง๋ฅผ ์ ๋ฌํ ์ ์๋ค.
๋ฉ์ธ ์ค๋ ๋์์๋ ์น ์์ปค์์ ์ ๋ฌํ ๋ฉ์์ง๋ฅผ ๋ง์ฐฌ๊ฐ์ง๋ก onmessage
๋ก ๋ฐ์ ์ ์๋ค.
์์ปค๋ฅผ ์ข
๋ฃ์ํฌ ๋๋ main thread์์ myWorker.terminate()
๋ก ์ข
๋ฃ์ํค๊ฑฐ๋, ์์ปค์์ close()
๋ฅผ ํธ์ถํ์ฌ ์ค์ค๋ก ์ข
๋ฃ์ํฌ ์ ์๋ค.
์น ์์ปค์ ๋ฉ์ธ ์ค๋ ๋ ์ฌ์ด์์ ์ ๋ฌ๋๋ ๋ฉ์ธ์ง๋ ๊ณต์ ๋๋ ๊ฒ์ด ์๋๋ค. ๋ฉ์ธ์ง๋ ๋ณต์ฌ๋๊ฑฐ๋ ์ ๋ฌ๋๋ค.
๋ฉ์ธ์ง๊ฐ ๋ณต์ฌ๋๋ ๊ฒฝ์ฐ, ์ง๋ ฌํ(serialized)๋์ด ๋ณต์ฌ๋ํ, ์ ๋ฌ๋๊ณ , ๋ค์ ์ญ์ง๋ ฌํ(deserialized)๋๋ค. ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด ๋ฐฉ์์ JSON encoding/decoding ํ๋ ์์ผ๋ก ๊ตฌํํ๋ค. ์ด๋ฌํ ๋ฐฉ์์ ๋ฉ์์ง๊ฐ ์ ์ก๋๋๋ฐ, ์๋นํ ํฐ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ ๋ฉ์ธ์ง๊ฐ ํด ์๋ก, ์ ๋ฌํ๋๋ฐ ๋ ์ค๋๊ฑธ๋ฆฐ๋ค.
๋ฉ์ธ์ง๊ฐ ์ ๋ฌ๋ ๊ฒฝ์ฐ, ๋ฉ์์ง๋ฅผ ๋ณด๋ธ ์ชฝ์์๋ ๊ทธ ๊ฐ์ ์ฌ์ฉํ ์ ์๋ค. ์ด ๋ฐฉ์์ ์ค์ง ArrayBuffer๋ง ์ ์กํ ์ ์๋ค๋ ํ๊ณ๊ฐ ์๋ค.
์น ์์ปค์ ํ๊ณ
์น ์์ปค์์ ์ง์ DOM ์กฐ์์ ํ ์ ์๊ณ , window ๊ฐ์ฒด์ ๋ฉ์๋๋ ์์ฑ์ ์ฌ์ฉํ ์ ์๋ค. ์น ์์ปค์์ ์ฌ์ฉํ ์ ์๋ API๋ ์ด ์ฌ์ดํธ์์ ํ์ธํ ์ ์๋ค.
์น ์์ปค๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ
์ํธํ
๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ fetchํ๊ธฐ
data๋ฅผ ๋ก๋ํด์ค๋ ์๊ฐ์ ๊ฐ์ ํ๊ณ , ์น ์ฌ์ดํธ๋ฅผ ์ต์ ํํ๊ธฐ ์ํด ์น ์์ปค๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํด์ ์ ์ฅํ ์ ์๋ค.
์ฐธ๊ณ
Last updated