2013-10-03 6 views
3

나는 모두 "타이머 사용"과 같이 될 것이라고 알고 있습니다. 그러나 설명해 줄게. 매크로처럼 뭔가를 만들고있어 특정 지연으로 실행되도록 함수가 필요합니다. 나는 그것이 타이머로 할 수 있다는 것을 알고 있지만, 코드는 50 타이머와 50 콜백으로 어떻게 보이나요? 잠을 자면 한 가지 기능으로 모두 멋져 질 수 있습니다. 웹 작업자는 별도의 스레드로 실행되므로 동결 문제는 없습니다.웹 근로자 수면

  1. 가 GET에 의해 주어진 초 X의 금액을자는 특별한 백엔드에 동기 XHR 요청합니다

    나는 단지 먹는 CPU없이 잠을 만드는 두 가지 방법을 알고있다. 이 방법이 효과가 있지만 실제로는 불편하며 서버에 ping을 보내야합니다.

  2. 생성기 함수 (yield)를 사용하고 타이머를 시작하는 주 스레드로 메시지를 보냅니다. 타이머가 실행되면 작업을 계속하기 위해 작업자에게 메시지가 다시 전송됩니다. 이것은 아주 좋은 해결책이지만, 아시다시피 파이어 폭스에서만 사용 가능합니다. Chrome은 발전기 기능을 지원하지 않습니다.

수면 기능을 달성하는 다른 방법이 있습니까?

+0

: 당신은 다음 transpilers을 사용할 수 있습니다 이것이 StackOverflow에 속해 있다고 가정하고, [Programmers.Stackexchange.com] (http://Programmers.StackExchange.com) 로의 마이그레이션을 위해 플래그를 지정하고 중재자가 생각하는 것을 살펴 보겠습니다. – Malachi

+0

크롬은 발전기를 지원합니다. 'chrome : // flags /'를 통해 하모니 지원을 가능하게하면,'var generator = function *() {/ * do something */yield 1;/* 다른 것을해라. */yield 2;/* 물건 완성하기 * /}; var g = generator(); g.next();/* 준비가되면 ... */g.next(); // etc' –

답변

0

해결책 - 스핀 록이 있습니다.

var d1 = Date.now(); 
while(Date.now() < d1+50) { 
    // do nothing 
} 

물론 최적이 아닙니다. 귀하의 질문에 발전기를 고려했다는 내용입니다. 발전기는 이런 문제를 해결하는 데 아주 좋습니다. 하지만 발전기를 사용할 수 있습니까? 생성자의 기본 구문은 브라우저에서 널리 채택되지 않습니다.

하지만 우리는 ES5에서 발전기를 지원하는 솔루션 빌드를 사용할 수 있습니다. 나는 확실하지 않다