2016-11-07 1 views
-2
document.write('Test.'); 
while (true) 1; 

브라우저가 텍스트를 먼저 표시하고 무한 루프로 이동하기를 원합니다. 그러나 나는 어떤 본문도 보지 못했다. 브라우저를 라인 단위로 이동시키는 방법? 브라우저가 첫 번째 줄을 마칠 때까지 기다리는 간단한 함수를 찾고 있습니다. 그런 것이 있습니까? waitForEverythingToFinish()처럼. window.getComputedStyle(div).getPropertyValue('height')을 사용하여 다시 그리기를 강요하는 것과 같습니다.텍스트를 표시하는 방법은 무엇입니까?

+2

브라우저가 "표시"를 시도하기 전에도 브라우저가 무한 루프를 시작하여 정지됩니다. 그리고 제발,'document.write()'를 사용하지 마십시오. –

+0

어떻게 변경 될 수 있습니까? 그것은 그 문제에 대한 극히 단순화 된 그림 일뿐입니다. 실제 코드에는'document.write()'가 포함되어 있지 않습니다. –

+1

@ TamásBolvári하지 않겠습니까? 왜 브라우저를 멈추고 싶습니까? 탭이 충돌합니다. – Brad

답변

1

나는 당신의 의견에 따라이 질문의 본질, 그것은 장기 실행 동기 작업을 시작 하기 전에 브라우저가 화면을 업데이트 할 시간이해야 할 것을 믿습니다. 가능한 경우 브라우저가 화면을 업데이트하므로 주 스레드를 차단하면 새로 고침 된 UI를 얻을 수 없습니다. 이것은 간단한 제한 시간으로 가능해야하며, 의견이 제시 한대로 requestAnimationFrame입니다.

간단한 시간 초과 :

// For example, document.write(...) 
funcThatChangesScreen(); 

setTimeout(function() { 
    // For example, lots of heavy calculations 
    synchronousFuncThatTakesALongTime(); 
}, 100); 

JSFiddle 비교 :

또는 requestAnimationFrame를 참조하십시오.

편집 : 주석의 다른 사람들이 지적했듯이, 이것이 실제로 작동하는 경우에도 원하는 것을 얻는 최선의 방법은 아닙니다. 장기간 실행되는 동기 작업이있는 경우이를 WebWorker에 위임하거나 비동기로 만드는 것이 가장 좋습니다. 이 제한 시간 솔루션을 사용하면 사용자가 화면의 텍스트를 볼 수 있지만 위의 JSFiddles와 마찬가지로 UI를 차단합니다.

+0

브라우저에서 원하는대로 화면을 업데이트 할 수없는 이유는 무엇입니까? 무엇을 기다리고 있습니까? 기다리고있는 것이 무엇이든 그것을 막을 수있는 방법이 있어야합니다. 아직 바쁘지는 않지만,'document.write ('Test.'); '에 요청할 때. 어쨌든, 내 질문에 완벽하게 대답했지만 다음을 추가 할 수 있습니다 : [requestAnimationFrame과 함께] (https://jsfiddle.net/ruLf0rkg/2/)? –

+1

@ TamásBolvári - 브라우저는 사용자가 볼 수있는 화면을 페인트하는 것을 포함하여 한 번에 한 가지만 할 수 있습니다. 브라우저는 화면 UI를 새로 고칠 필요가있을 때까지 기다리지 않아도 똑똑해 지려고합니다. 그렇지 않으면 거의 모든 단일 코드 행 이후에 상수를 다시 칠하면 모든 것이 훨씬 느려집니다. 자세한 내용은 [JS 멀티 스레딩에 대한 답변] (http://stackoverflow.com/questions/7909593/is-it-possible-to-thread-javascript-and-keep-access-to-the-ui)을 참조하십시오. requestAnimationFrame에 대한 설명은 [here] (https://css-tricks.com/using-requestanimationframe/)입니다. –

-1

이 방법이 적합한 지 확인하십시오.

if(!document.write('Test.')){ 
    while (true) 1; 
} 
+0

불행히도 그렇지 않습니다. –

관련 문제