subworker 정확히 통상 전용 작업자가 생성되는 것과 동일한 방식 스폰
worker.postMessage({cmd: 'start'});
당신은 https://html.spec.whatwg.org/multipage/workers.html#delegation에서 예를 찾을 수 있습니다 (포함합니다. 테스트 할 수있는 링크). 그러나 순간에 subworkers을 지원하는 유일한 브라우저 파이어 폭스 및 에지 있습니다. 크롬, 사파리, 오페라 및 안드로이드 브라우저 (Nougat)는 불행히도 멀티 코어 시스템의 성능을 향상시키는 데 크게 도움이되지만이 기능을 구현하지는 않습니다.
크롬의 7 살짜리 issue에 따르면, 그들은 사양의이 부분을 구현하는거야 가능성이 보이지 않는다. 당신이 브라우저 호환성을 유지하려면
는 유일한 방법은 등을 메시지를 다시 라우팅 모든 (또한 DOM/UI를 관리하는) 메인 쓰레드에서 노동자와 부담을 산란하는 것입니다.
하위 작업자를 생성하고 메시지를 앞뒤로 보내는 작업자를 만들고자한다고 가정하면 처리기를 의사 작업자 (별도 스레드가 아닌)로 변경할 수 있지만 코드 변경은 최소로 유지하십시오 "처리기"의 상단에이 코드를 추가하고 물론 new PseudoWorker();
대신 new Worker("handler.js");
(그것을 인스턴스화하여 당신은 클래스를 찾을 수 있습니다 귀하의 웹 페이지에 "handler.js"에 JS 참조를 추가해야 할 것 PseudoWorker는) :
// begin of PseudoWorker wrapper
var parentOnmessage;
var PseudoWorker = function() {
var initialized = false;
this.postMessage = function(msg) {
self.onmessage({data: msg});
if (!initialized) {
self.parentOnmessage = this.onmessage;
initialized = true;
}
}
}
this.postMessage = function(data) {
parentOnmessage({data: data});
}
// end of PseudoWrapper - add your code after this line as if this was a normal worker
주의해야 할 점은 PseudoWorker이 메시지를받은 자동으로 만 후 작업을 시작하지 않을 것이라고 할 것이다. 이것은 변수가 제대로 초기화 될 수 있도록하기 위해서입니다. 그러나 코드는 위에서 언급 한 모든 브라우저에서 작동합니다. 브라우저가 하위 작업자를 지원하는 즉시 PseudoWorker에서 일반 작업자로 다시 전환 할 수 있습니다.