在Javascript中,如果我们有以下代码:
var j = 0;
for(i=0; i<j; i++){
//JS Code
}
在这段代码中,变量j 的最大值(即浏览器不会挂起的值)的因素取决于(可能是机器的RAM或处理器,或者可能是代码在循环中执行)?
可以计算出这个最大允许值吗?
这是必需的,因为有一个需要处理的大型数组。
提前感谢您的任何建议。
答案 0 :(得分:1)
不,你无法计算,从浏览器到浏览器的变化太大了。有些浏览器会按时间执行此操作(例如,您的代码运行时间超过X秒而不会返回浏览器;在Firefox 7上默认为10秒但the user can change it),其他浏览器按操作次数执行此操作( IE, for instance)。
您最好的选择是重构代码,以避免开始接近极限。如果您要完成大量工作,请将其分解为块,然后使用setTimeout
一个接一个地运行块,其超时值为0
。这会产生回到浏览器(超过0
毫秒;确切地说,浏览器以及页面上发生的其他事情会有多长时间。)
以下是在100,000个迭代块中计算10,000,000的示例:
function toAMillion() {
var counter = 0,
limit = 10000000,
chunk = 100000;
doAChunk();
function doAChunk() {
var target = Math.min(limit, counter + chunk);
while (counter < target) {
++counter;
}
if (counter < limit) {
// Schedule next chunk
setTimeout(doAChunk, 0);
}
else {
// Done
display("Done, counter = " + counter);
}
}
}
答案 1 :(得分:1)
在处理大量数据时保持UI响应的常见做法称为分块。你雕刻了一组项目,并使用setInterval或setTimeout来包装每个组的循环。