>  기사  >  웹 프론트엔드  >  백그라운드에서 실행되는 JavaScript 스레드--Web Worker

백그라운드에서 실행되는 JavaScript 스레드--Web Worker

零下一度
零下一度원래의
2017-06-25 09:28:341421검색

간단히 말하면 Web Worker는 백그라운드에서 실행되는 JavaScript 스레드이므로 페이지 응답에 영향을 주지 않습니다.

우리는 JavaScript가 단일 스레드 스크립팅 언어라는 것을 알고 있습니다. 즉, 동시에 한 가지 작업만 수행할 수 있습니다. 그렇지 않으면 매우 복잡한 동기화 문제가 발생합니다. 예를 들어 JavaScript에는 두 개의 스레드가 동시에 있는데, 한 스레드는 특정 DOM 노드에 콘텐츠를 추가하는 역할을 하고, 다른 스레드는 해당 노드를 삭제합니다. 이때 브라우저는 어떤 스레드를 기본 스레드로 사용해야 할까요?

그래서, 동기화 복잡성 문제를 피하기 위해 JavaScript는 탄생부터 단일 스레드를 사용했는데, 이는 이 언어의 특징이기도 합니다.

JavaScript의 단일 스레드 메커니즘은 처리해야 할 매우 복잡한 작업이 있는 경우 페이지가 사용자 작업에 응답하기 전에 작업 처리가 완료될 때까지 기다려야 한다는 문제를 야기합니다. 페이지의 응답 및 사용자 경험에 부정적인 영향을 미칠 수 있습니다. 이 문제를 해결하고 멀티 코어 CPU의 컴퓨팅 성능을 활용하기 위해 HTML5는 JavaScript가 여러 개를 생성할 수 있도록 하는 Web Worker 표준을 제안했습니다. 그러나 새로 생성된 스레드는 하위 스레드로 사용되며 기본 스레드에 의해 완전히 제어됩니다. 그리고 DOM을 작동하는 것은 허용되지 않습니다. 실제로는 여전히 단일 스레드입니다. 따라서 시간이 많이 걸리는 일부 작업을 Web Worker가 생성한 하위 스레드에 넘겨 백그라운드에서 완료하도록 할 수 있으며, 동시에 포그라운드 페이지는 여전히 사용자의 응답을 처리할 수 있습니다.

Web Worker가 생성한 스레드는 제한된 하위 스레드이므로 몇 가지 사용 제한이 있습니다.

  • Web Worker는 DOM 노드에 액세스할 수 없습니다.

  • Web Worker는 전역 변수 또는 전역 함수에 액세스할 수 없습니다.

  • Web Worker는 경고() 또는 확인과 같은 기능을 호출할 수 없습니다.
  • Web Worker는 창 및 문서와 같은 브라우저 전역 변수에 액세스할 수 없습니다.
  • 그러나 Web Worker의 Javascript는 여전히 setTimeout( ), setInterval을 사용할 수 있습니다. () 및 기타 기능을 사용하면 Ajax 통신에 XMLHttpRequest 객체를 사용할 수도 있습니다.

현재 Internet Explorer를 제외한 모든 주요 브라우저는 웹 작업자를 지원합니다.

Angular에 익숙한 친구들은 Angular1이 더러운 검사 메커니즘으로 인해 가장 비판을 받는다는 것을 알아야 합니다. 범위에 데이터가 너무 많으면 성능에 심각한 영향을 미칩니다. Angular2는 인터페이스 스레드가 영향을 받지 않도록 WebWorker를 사용하여 무거운 계산 작업을 보조 스레드로 이동합니다.

위 내용은 백그라운드에서 실행되는 JavaScript 스레드--Web Worker의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.