2. 웹 워커
웹 워커를 활용하면 CPU 연산이 많이 필요한 연산을 백그라운드 스레드에서 실행할 수 있다. 백그라운드 스레드에서 실행되는 코드는 사용자가 작업하는 메인 스레드에 영향을 주지 않는다. 애플리케이션에서 CAD를 그리거나 복잡한 지도 계산과 같이 연산하는 작업이 많다면 웹 워커를 사용해서 애플리케이션 전체 성능을 향상시킬 수 있다.
Note
- 웹 워커에서 Angular를 실행하는 기능은 지원하지 않는다.
1. 웹 워커 추가하기
프로젝트에 웹 워커를 추가하려면 Angular CLI로 ng generate
명령을 실행하면 된다.
웹 워커를 생성하는 위치는 고정되어 있지 않다. 최상위 컴포넌트 src/app/app.component.ts
파일과 같은 위치에 웹 워커를 생성하려면 이렇게 실행하면 된다.
이 명령을 실행하면 이런 작업이 실행된다.
- 프로젝트에 웹 워커 환경설정을 추가한다.
src/app/app.worker.ts
파일에 메시지를 받는 기본 코드를 추가한다.
src/app/app.worker.ts
addEventListener("message", ({ data }) => {
const response = `worker response to ${data}`;
postMessage(response);
});
src/app/app.component.ts
파일에 메시지를 보내는 기본 코드를 추가한다.
src/app/app.component.ts
if (typeof Worker !== "undefined") {
// 웹 워커를 생성합니다.
const worker = new Worker(new URL("./app.worker", import.meta.url));
worker.onmessage = ({ data }) => {
console.log(`page got message: ${data}`);
};
worker.postMessage("hello");
} else {
// 웹 워커를 지원하지 않는 환경입니다.
// 이 환경에서도 애플리케이션이 제대로 동작할 수 있는 보완 로직을 추가해야 합니다.
}
이제 기본 코드를 기반으로 애플리케이션이 웹 워커와 메시지 통신하는 로직을 추가하면 된다.
Note
- 애플리케이션이 실행되는 환경이나 플랫폼에 따라 웹 워커를 지원하지 않을 수 있다.
- 서버 사이드 렌더링할 때 사용하는
@angular/platform-server
도 웹 워커를 지원하지 않는다. - 그래서 웹 워커가 동작하지 않는 환경에서도 필요한 작업을 실행할 수 있는 보안 로직을 항상 준비해야 한다.