JS挂在做while while循环
我想知道我怎么能用JS解决悬挂页面。JS挂在做while while循环
我有一个JS循环这样的IM测试,但它似乎挂起永远这 - 是有没有办法阻止它挂,而实际上仍然完成剧本:
<div id="my_data"></div>
<script>
function test(value){
output= [];
do{
value++;
output.push(value);
document.getElementById('my_data').innerHTML = (output.join(''));
}while(value < 10000000);
alert('end'); // never occurs
}
test(0);
</script>
您连续级联数10,000,000
连成一串,这真的不会在任何现代超级计算机很好地工作。
如果您想查询进度,设置一个计时器来做到这一点有点慢。这是不实际的,但它看起来不错:http://jsfiddle.net/V6jjT/2/
HTML:
<div id="my_data"></div>
脚本:
var value = 0;
var interval = setInterval(function() {
if (value > 100) {
clearInterval(interval);
return;
}
value++;
document.getElementById('my_data').innerHTML += ' ' + value;
}, 10);
啊,多喜欢它! – Sir
您是否可以更新您的问题,提及您希望看到更新,因为他们碰巧让问题和答案对他人更有帮助? –
运行,直到它完成这样一个紧密的循环将不会更新任何东西;此外,还有10M数组项目?!
如果你真的想这样做,而不是让浏览器挂起,直到永远,你必须使用setInterval
来让浏览器之间的刷新英寸
function updater(value, max, interval) {
var output = [],
node = document.getElementById('my_data'),
tid = setInterval(function() {
if (value++ < max) {
output.push(value);
node.innerHTML = (output.join(''));
} else {
alert('done');
clearInterval(tid);
}
}, interval);
}
updater(0, 10, 200);
你不应该更新HTML每次迭代。
function test(value){
output= [];
do {
value++;
output.push(value);
} while(value < 10000000);
document.getElementById('my_data').innerHTML = (output.join(''));
alert('end'); // never occurs
}
应该工作(尽管HTML中的1000万数字仍然需要他们的时间来呈现)。
如果你想看到的数字运行,你应该window.setInterval
看看 - 浏览器需要执行JS之间的某个时间以刷新其视图。因此,您将不得不重新编写运行几块数据的代码。另请参见:
- Running a long operation in javascript?(你的循环示例代码)
- How can I force the browser to redraw while my script is doing some heavy processing?
- Javascript async loop processing
- Prevent long running javascript from locking up browser
- DOM refresh on long running function
- Best way to iterate over an array without blocking the UI
- Javascript - how to avoid blocking the browser while doing heavy work?
你想用10000000次做什么? – diEcho
什么我只是做一个测试 - 我没有把它应用到网站或任何东西。 – Sir
不要测试浏览器的耐心 – diEcho