2013-08-31 1 views
1
for (var i = 0; i < dataArray.length; i++) { 
     if(((i/dataArray.length)*100)%10 == 0) 
      $("#progressbar").progressbar({ value: (i/dataArray.length) * 100 }); 
     if (resultArray.indexOf(dataArray[i]) == -1) // check for duplicates 
      resultArray.push(dataArray[i]); 
} 

각 루프의 진행률 막대를 계속 업데이트하고 싶지 않기 때문에 if 문을 추가했습니다. 루프는 거의 222000 번 실행됩니다. 진행 상황을 업데이트하는 더 좋은 논리가 있습니까?루프 내에서 진행 막대의 진행 상태가 업데이트되지 않습니다.

if 문을 입력하지 않는 이유는 무엇입니까?

+0

단지 의견을 말하면 루프 밖의 변수에'$ ("# progressbar")'를 캐시 할 수 있으므로 매 루프마다 호출 할 필요가 없습니다. – Sergio

+1

dataArray 란 무엇입니까? 마크 업을 보여주십시오. –

답변

1

당신은 조금 당신의 코드에서 최적화이를 사용할 수 있습니다

prog_bar = $("#progressbar"); 
for (var i = 0; i < dataArray.length; i++) { 
     if(i%100 == 0) 
     prog_bar.progressbar({ value: (i/dataArray.length) * 100 }); 
     //other code.. 
} 

하면 for 루프를 사용합니까? 이 루프를 "일시 중지"하는 것이 없으므로 매우 빠르게 실행되며 성장하는 대신 100 %로 볼 수 있습니다.

당신은 대신 "다른 코드"로, 진행률 막대를 업데이트하는 (대신에 for 루프의) 함수를 호출 할 수 here

데모 실행 :

var i = 0; 
function update_progress_bar() { 
    if (i % 100 == 0) { 
     prog_bar.progressbar({ 
      value: (i/10000) * 100 
     }); 
    } 
    i++; 
} 

뭔가 처럼 this fiddle

+1

루프의 다른 활동에 시간이 걸리는 경우에도 UI 스레드가 tp를 실행하지 않기 때문에 진행 막대를 표시하지 않습니다. –

+0

@ArunPJohny 실제로 나는 그것에 대해 생각했습니다. 어떻게 수정하겠습니까? – Omar

+0

@Omar, 코드에 따라 다르지만,'// other code' 내부에서 어떤 일이 일어나고 있습니까? – Sergio

관련 문제