2012-01-26 2 views
2

나는 이것에 확실히, 그러나 너의 의견이있는 것을 확신한다 :웹 작업자가없는 자바 스크립트 백그라운드 처리?

웹 노동자를 이용할 수없는 경우에 Javascript를 가진 배경에 어쨌든 가동을 실행하는 것이 가능한가? 비동기식 setTimeout() 기능 또는 일부 다른 메커니즘을 "오용"할 수있는 방법이 있습니까? 저의 목표는 localStorage에서 물건을 읽고, 몇 가지 변형을하고 Ajax를 통해 보내주는 것입니다.

감사합니다.

답변

1

웹 작업자를 사용하지 않고 제안한 내용 (setTimeout 사용) 만 수행 할 수있는 유일한 방법이며 그 시점에서 실제로 "배경"이 아닙니다. "배경"코드를 실행할 때마다 처리를 아주 짧게 유지해야합니다. 왜냐하면 실제로 배경 코드가 아니기 때문입니다. 코드가 실행되는 동안 페이지가 상당히 반응하지 않을 것입니다 (응답하지 않는 정도는 브라우저에 따라 다르지만 확실히 페이지의 모든 JavaScript 코드는 함수 호출이 완료 될 때까지 기다려야합니다).

2

자바 스크립트에는 실제로 멀티 스레딩이 없지만 setTimeout(code, 0)을 사용하면 코드를 비동기 적으로 실행할 수 있습니다. 이것은 실행을 위해 함수를 대기시킵니다.

+0

좋아으로 실행됩니다 반면, 정상 동작에 반응하지만, 그 코드가 미래 jQuery를 한 점에서 실행중인 경우이 뜻대로 그럼에도 불구하고 UI 기반 UI가 차단 될 것입니다. – ceran

1

아니요, 자바 스크립트의 백그라운드에서 수행 할 수있는 방법이 없습니다. 그것은 엄격하게 싱글 스레드입니다.

setTimeout 또는 setInterval을 사용하면 전경에서 작업을 수행 할 수 있지만 그 중 일부만 수행 할 수 있습니다. 그렇게하면 인터페이스가 작동하는 사이의 이벤트를 처리 할 때 여전히 상당히 반응적입니다.

3

백그라운드에서 작업을 실행할 수는 없지만 작은 청크로 분할하고 setTimeout을 사용하여 각 다음 부분을 실행할 수 있습니다. 결과 브라우저 변경 사항을 렌더링하는 시간을 가질 것입니다 당신의 긴 과정이 잘

function iteration(){ 
    do_some_small_amount_of_work(); 
    if (!not_finished) 
     scheduler.setTimeout(iteration, 1); 
} 
+0

당신에게도 3 명의 당신에게 감사합니다. – ceran