[javascript] 웹 작업자가 할 수없는 서비스 작업자는 무엇을 할 수 있습니까?

웹 작업자가 할 수없는 서비스 작업자는 무엇을 할 수 있습니까? 혹은 그 반대로도?

웹 워커는 서비스 워커 기능의 하위 집합 인 것 같습니다. 이 올바른지?



답변

용도에 큰 차이가 있습니다.

웹 워커

웹 작업자는 웹 콘텐츠가 백그라운드 스레드에서 스크립트를 실행할 수있는 간단한 수단을 제공합니다. 작업자 스레드는 사용자 인터페이스를 방해하지 않고 작업을 수행 할 수 있습니다. 또한 XMLHttpRequest를 사용하여 I / O를 수행 할 수 있습니다 (responseXML 및 채널 속성은 항상 null 임). 생성 된 작업자는 해당 코드에 지정된 이벤트 핸들러에 메시지를 게시하여 생성 한 JavaScript 코드로 메시지를 보낼 수 있습니다 (반대의 경우도 마찬가지).

출처-웹 작업자 사용

서비스 워커

서비스 작업자는 기본적으로 웹 애플리케이션과 브라우저 및 네트워크 (사용 가능한 경우) 사이에있는 프록시 서버 역할을합니다. 이는 무엇보다도 효과적인 오프라인 경험을 생성하고, 네트워크 요청을 가로 채고, 네트워크가 사용 가능하고 업데이트 된 자산이 서버에 있는지 여부에 따라 적절한 조치를 취할 수 있도록하기위한 것입니다. 또한 푸시 알림 및 백그라운드 동기화 API에 대한 액세스를 허용합니다.

소스-서비스 작업자 API

따라서 웹 워커는 사용자 인터페이스를 멈추지 않고 값 비싼 스크립트를 실행하는 데 편리하며, 서비스 워커는 네트워크 요청의 응답을 수정하는 데 유용합니다 (예 : 오프라인 앱을 빌드 할 때).


답변

Buksy의 대답 은 맞지만 제 생각에는 “웹 작업자가 할 수없는 서비스 작업자가 무엇을 할 수 있습니까? 아니면 그 반대로 할 수 있습니까?”라는 원래 질문에 대답하지 않습니다.

수명주기와 보유 할 수있는 오리진 당 인스턴스 수에는 근본적인 차이가 있습니다. 요컨대 :

               | Web Workers  | Service Workers  |
|--------------|--------------|------------------|
| Instances    | Many per tab | One for all tabs |
| Lifespan     | Same as tab  | Independent      |
| Intended use | Parallelism  | Offline support  |

Buksy의 대답은 기본적으로 테이블의 마지막 행입니다. 출처 : Nolan Lawson의 Demystifying Web Workers and Service Workers ( 슬라이드 35 부터 시작) 에서이 표를 가져 왔습니다 .

특히 다음은 웹 워커를 생성하고 종료하는 방법입니다.

웹 작업자 사용

서비스 작업자는 자신의 수명주기를 가지고 있으며, 이는 “가장 복잡한 부분”입니다.

서비스 워커 라이프 사이클

따라서 수명주기는 둘 사이의 근본적인 차이점 중 하나입니다 (원하는 용도의 결과).

브라우저 지원 에는 큰 차이 가있었습니다. iOS 용 Safari에서는 11.3 (2018 년 3 월 29 일)까지 서비스 워커를 사용할 수 없었습니다. 서비스 워커를 사용할 수 있나요?를 참조하세요 . 반대로 웹 작업자는 2012 년에 이미 훨씬 더 나은 브라우저 지원을 받았습니다. 웹 작업자를 사용할 수 있습니까?

IE11을 지원해야하는 경우 웹 워커 만 사용할 수 있습니다. IE11에는 서비스 워커가 없으며 IE11에 대한 지원 종료는 2025 년 10 월 14 일 입니다.

브라우저 간 API 지원 에는 미묘한 차이가 있습니다. HTML5 작업자 테스트 (Nolan Lawson도 제공)를 참조하세요 . 특정 브라우저에서 한 종류의 작업자는 특정 API 호출을 지원하지만 다른 작업자는 지원하지 않을 수 있습니다. 해당 페이지를 방문하여 자신의 브라우저를 테스트하십시오!


답변