2021. 12. 12. 01:37ㆍJavascript
Javascript는 단일 Thread로 동작되는 언어이다.
그럼에도 Mutli Thread로 구현을 해야 할 때가 있다.
이 때 'Web Worker' 를 사용하면 된다.
Javascript에서 동적으로 UI를 변경 시킬 때 UI Thread 공간에서 Queue 방식으로 처리순서를 담아 놓는다.
(이에 대한 자세한 내용은 이벤트 Loop를 설명할 때 진행하도록 하겠다.)
Web Worker는 Multi Thread 기능을 지원하여 Worker가 생성될 때 마다 Javascript를 실행할 수 있는 고유 스레드를 생성하여 속도 성능을 크게 향상시킬 수 있다.
Worker에서 실행하는 코드는 Browser UI, 다른 워커에서 실행하는 코드에도 영양을 안주는 독립적인 Thread 이다.
그럼 Worker를 생성하는 방법에 대해 알아보자.
먼저 Worker.js 파일을 하나 만들어 사용할 로직을 만들어보자.
1
2
3
4
5
6
7
8
|
// worker.js
var updateTime = function() {
postMessage(new Date().toLocaleString());
setTimeout(updateTime(), 1000); // recursive
};
updateTime();
|
cs |
간단하게 1초마다 시간을 업데이트 해 어딘가로 보내주고 있는 로직이다.
위 worker.js를 사용하기 위해선 아래와 같이 사용해주면 된다.
1
2
3
4
5
6
|
// app.js
var worker = new Worker("worker.js");
worker.onmessage = function(response) {
console.log(response);
}
|
cs |
굉장히 간단하다.
postMessage를 통해 데이터를 송신하고, app.js에서는 worker.onmessage를 통해 Message가 들어왔을 때 console.log();를 호출하는 기능이다.
물론 worker를 사용하기 전 호환성 검사는 반드시 필요하다.
또한, 위 Worker는 GC가 자동으로 처리를 못해주기 때문에 Application이 종료될 때 아래와 같은 코드를 반드시 실행해주도록 하자.
1
2
|
worker.terminate();
worker = undefined;
|
cs |
'Javascript' 카테고리의 다른 글
[Javascript] Data Binding (0) | 2021.12.12 |
---|---|
[Javascript] 이벤트 루프 Event Loop (0) | 2021.12.12 |
[Javascript] this (0) | 2021.12.12 |
[Javascript] 클로져 Closure (0) | 2021.12.12 |
[Javascript] 호이스팅 Hoisting (0) | 2021.12.12 |