2022. 8. 2. 22:08ㆍProgram/JavaScript
234_자바스크립트 백그라운드에서 스크립트 작업하기
[적용]
- 부하가 큰 처리를 실행하고 싶을 때
[문법]
메소드 | 의미 | 반환 |
new Worker(파일주소) | 웹 워커 인스턴스 생성 | 인스턴스 |
[내용]
자바스크립트는 메인 스레드로 동작하며, 부하가 큰 작업을 실행하면 처리 작업 중에는 조작이 불가능하다.
자바스크립트 처리가 UI를 담당하는 메인 스레드를 멈추게 하기 때문이다.
웹 워커(Web Worker)를 사용하면 이 문제를 해결할 수 있다.
웹 워커는 메인 스레드의 자바스크립트와 분리되어 실행되며, 부하가 큰 계산 작업 등을 처리할 때 유용하다.
웹 워커는 메인 스크립트와 스레드가 다르므로 DOM 조작이 불가능하며, 페이지가 열려 있을 때만 실행된다는점에 주의하자.
웹 워커와 메인 스레드는 postMessage()를 사용해 메시지를 전송하고, onmessage 이벤트 핸들러로 데이터를 반환하며,
해당 데이터에는 onmessage 이벤트 data 속성에 보관된다.
HTML index.html
<div class="wrap">
<input type="number" value"1" id="numA" /> +
<input type="number" value="2" id="numB" /> =
<span class="result"></span>
</div>
<button>계산하기</button>
JavaScript main.js
// 참조 가져오기
const numA = document.querySelector('#numA');
const numB = document.querySelector('#numB');
const result = document.querySelecotr('.result');
const btn = document.querySelector('button');
// worker 생성
const worker = new worker('worker.js');
// 버튼 클릭 시
btn.addEventListener('click', () => {
worker.postMessage([Number(numA.value), Number(numB.value)]);
console.log('[메인스크립트] worker로 데이터 전송');
});
// worker 데이터를 가져올 때
worker.onmessage = function(e) {
// 결과를 화면에 표시
result.textContent = e.data;
console.log('[메인스크립트] worker에서 메시지 가져오기');
};
onmessage = (e) => {
console.log('[worker]메인스크립트의 데이터 가져오기');
// 덧셈 계산
const result = e.data[0] + e.data[1];
console.log('[worker]메인스크립트로 데이터 전송');
postMessage(result);
};
JavaScript worker.js
onmessage = (e) => {
console.log('[worker]메인스크립트의 데이터 가져오기');
// 덧셈 계산
const result = e.data[0] + e.data[1];
console.log('[worker]메인스크립트로 데이터 전송');
postMessage(result);
};
main.js와 worker.js는 별도의 파일로 생성해야 한다.
참조 :
실무에 바로 적용하는 자바스크립트 코드레시피 278
아케다 야스노부, 카노 타케시 지음 / 이춘혁 옮김
'Program > JavaScript' 카테고리의 다른 글
[JavaScript] 자바스크립트에서 푸시 알림 (0) | 2022.08.02 |
---|---|
[JavaScript] 자바스크립트 백그라운드에서 작업 실행하기 (0) | 2022.08.02 |
[JavaScript] 자바스크립트에서 XMLHttpRequest로 작업 취소하기 (0) | 2022.08.02 |
[JavaScript] 자바스크립트에서 XMLHttpRequest로 작업상황 확인하기 (0) | 2022.08.02 |
[JavaScript] 자바스크립트에서 XMLHttpRequest로 데이터 읽어오기 (0) | 2022.08.02 |