개발 이야기/JavaScript

웹 워커와 서비스 워커

석구석구 2021. 11. 28. 19:15

브라우저는 자바스크립트를 실행하기 위해 싱글 스레드를 사용한다.

때문에, 자바스크립트는 한 번에 한 가지의 일만 수행할 수 있다.
비동기 처리를 통해 기다리는 시간을 줄이더라도, 결국 메시지 큐에 쌓인 업무들은 Run to Completion 원칙에 따라 동작합니다. 

"Run-to-completion"

각 메시지는 다른 메시지가 처리되기 전에 완전히 처리됩니다.

이것은 함수가 실행될 때마다 미리 비워질 수 없고 다른 코드가 실행되기 전에 완전히 실행되며 함t수가 조작하는 데이터를 수정할 수 있다는 사실을 포함하여 프로그램에 대한 추론을 할 때 좋은 속성을 제공합니다. 이것은 C와는 다릅니다. 예를 들어 함수가 쓰레드에서 실행된다면 런타임 시스템이 다른 쓰레드에서 다른 코드를 실행하기 위해 어느 시점에서 멈출 수 있습니다.

이 모델의 부정적인 면은 어떤 메시지가 완료되기 까지 지나치게 오래 걸린다면 웹 어플리케이션은 클릭이나 스크롤과 같은 사용자 인터랙션을 처리할 수 없게 됩니다. 브라우저는 이러한 상황을 "a script is taking too long to run"과 같은 대화상자로 완화 합니다. 추천되는 좋은 방법은 메시지 처리를 짧도록 만드는 것과 하나의 메시지를 여러개의 메시지로 나누는 것 입니다.

웹 워커는 이러한 문제를 완전히 다른 차원으로 해결합니다. 워커는 또다른 자바스크립트 런타임입니다. 자신의 스택, 힙, 메시지 큐를 가지고 있습니다. 두 별개의 런타임들은 메세지 API를 이용하여 통신할 수 있습니다.

 

  웹 워커 서비스 워커
동작 메인 스레드 블록 없이, 추가 스레드에서 실행
객체 접근 Window, Document 접근 불가능. DOM 직접 연결 불가능, Browser API 제한적 사용
네트워크   인터셉트 가능
관계 페이지당 여러개 모든 황성 탭 제어
종료 독립적
사용처    
참조 https://github.com/GoogleChromeLabs/comlink  

 

'개발 이야기 > JavaScript' 카테고리의 다른 글

Prometheus 프로메테우스를 이용한 Node 모니터링  (0) 2022.09.08
리코일을 이용한 비동기 처리  (0) 2022.09.08
Babel - Typescript - React  (0) 2021.02.19
Rxjs 기본  (0) 2020.08.24
@storybook/react  (0) 2020.06.02