3

我们正在使用 Bing 和/或 Google javascript 地图控件,有时会使用大量可动态更改的叠加层。

我已阅读http://support.microsoft.com/kb/175500/en-us并知道如何设置 MaxScriptStatments 注册表项。

问题是我们不想以编程方式在用户的计算机上设置此注册表项或任何其他注册表项,而是希望以其他方式实现相同的效果。

还有其他方法吗?

4

2 回答 2

5

除了使脚本“更轻”之外,您几乎无能为力。尝试分析它并找出最繁重的运算发生在哪里,然后尝试优化这些部分,将它们分解为更小的组件,在前一个组件完成后调用下一个组件超时,等等。基本上,每隔一段时间将控制权交还给浏览器,不要在一个函数调用中处理所有内容。

于 2009-08-06T00:07:04.247 回答
1

通常,在循环的代码中会遇到长时间运行的脚本。

如果您必须遍历大量数据并且可以异步完成 - 类似于另一个线程,则将处理移至网络工作者(http://www.w3schools.com/HTML/html5_webworkers.asp)。

如果你不能或不想使用 webworker,那么你可以找到导致脚本长时间运行的主循环,你可以给它一个最大循环数,然后使用 setTimeout 让它返回给客户端。

不好:(thingToProcess 可能太大,导致脚本运行时间过长)

function Process(thingToProcess){     
    var i;
    for(i=0; i < thingToProcess.length; i++){
        //process here
    }
}

好:(只允许 100 次迭代,然后返回)

function Process(thingToProcess, start){    
    var i;
    if(!start) start = 0;
    for(i=start; i < thingToProcess.length && i - start < 100; i++){
        //process here
    }
    if(i < thingToProcess.length) //still more to process
        setTimeout(function(){Process(thingToProcess, i);}, 0);
}

两者都可以以相同的方式调用:

Process(myCollectionToProcess);
于 2014-07-17T15:05:16.190 回答