作者TonyQ (骨頭)
看板Web_Design
標題Re: [問題] Javascript 的迴圈似乎會先執行完畢才씠…
時間Tue Oct 2 21:51:35 2007
※ 引述《logs ()》之銘言:
: 用 C/C++ 等語言寫程式碼的時候
: for (i=0;i<100000;i++){
: cout<<i<<endl;
: }
: 這樣會按照不同電腦的執行效能
: 各有快慢地「逐行」顯示
: 但是 javascript 的迴圈似乎有一個特性
: 一律先算完,才出現結果
: for (i=0;i<10000;i++){
: out.innerHTML+=i+"<br>";
: }
: <textarea id=out></textarea>
: 這樣的JS似乎不會一一顯示,而是一次突然全部顯示
no 還是分次顯示
不然你可以在理面下個alert就可以看到效果了
for (i=0;i<10000;i++){
out.innerHTML+=i+"<br>";
alert('stop');
}
只是 js engine還在跑 , 而且js執行的間隔時間本來就蠻短的
所以browser 一直處於 處理中的狀態
這跟一次全部顯示的意義不太一樣,
它是"沒空分別顯示"。
: 有試過呼叫空回圈函式,修改如下
: function twait(t){
: var now=new Date();
: var init=now.getTime();
: while((now.getTime()-init)<t){now=new Date();}
: }
: for (i=0;i<100;i++){
: twait(100);
: out.innerHTML+=i+"<br>";
: }
: 結果當然也是等了好久,結果一次全部秀出來......
你的twait也會鎖住執行緒
(那段時間執行了大量的while結構 , 所以browser還是很忙)
你可以試著用window.setTimeout做遞回
把它變成非同步的處理模型就可以了...
: 該怎麼做才能使 JS 表現出像 C/C++ 那樣
: 有多少結果就馬上 show 出來,不要等到最後才出現
讓它的間隔時間長一點
不過相對的 , 寫完全部資料的時間也會久一點.
這個可以算是某種程度的緩衝吧
--
▄▅▆▇███▇▆▅▄▃ ╰┼╯─╮ ╮
◥███████████◣ ╰┼╯=│=│
◥██████───────◣ *. ╯ ╯ ╯ の 物 語 .*
◥███████──────◣ ~ ◢◣ ◢◣
◥██████───────◤ ◥◤* 空白的世界.翼
*◥◤
◥██▁▂▃▄▅▆▇███▆▅▄▃▂▂
~telnet://tony1223.no-ip.info
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.115.76.202
1F:推 logs:所以問題出在 JS 跑太快,obj.innerHTML 跑太慢 是這樣嗎? 10/02 22:07
2F:→ TonyQ:問題出在瀏覽器無法同時執行js又顯示畫面.... 10/02 23:09
3F:推 fillano:如果只是要做出顯示的效果,那把迴圈改成setTimeout來做吧 10/03 09:47