2011-04-18 23 views
7

从JavaScript我打电话给网络方法。在IE中,如果我将一个巨大的参数传递给该Web方法,则会弹出一个警告“停止运行此sciprt?此页面上的脚本正在导致Internet Explorer运行缓慢”。如何处理“此页面上的脚本导致Internet Explorer运行缓慢”警报?

是否可以处理单击“是”按钮,以便如果用户决定取消脚本执行,我可以运行一些替代脚本(在这种情况下,我的“替代”脚本包含关闭一些进度我在运行长时间脚本之前弹出)。

我已经看过很多文章解释如何防止显示此警报,但我不想停止显示警报:我只是想能够处理用户决定停止的情况脚本执行。

+1

你可以有一个单独的函数,定期检查工作是否实际上正在继续 – JohnP 2011-04-18 09:02:00

+0

在标准的JS你实际上不能;工作是以单线程的方式同步执行的,因此单独的函数在第一个完成之后才会运行,这就太迟了。 – 2011-04-19 00:39:31

回答

4

我以前在内部应用程序中处理过这个问题,他们不关心浏览器需要多长时间才能关闭数据,他们只是不想点击提示。

的关键是向下打破工作成工作的相对可预测的块(预测的在CPU时间而言)和在类似的setInterval运行它们:

function doWork(begin, end) { 
    // Some chunk of what your worker function normally does from begin to end 

    if (actualEnd < end) // Nothing left to do 
     clearInterval(Interval); 
} 

var Interval = setInterval(doWork, 15); 

这防止了IE提示出现(或Chrome提供“冻结”对话框)。下一步是添加一些代码,让用户完全跳过它;如果一开始就知道工作量,马上询问他们。如果没有,开始处理,并在n个块后问他们是否想要做更便宜的功能。

有2个着手完成这么多的工作,其他的选项:

  1. 向前看,以有多少工作要做,如果这是一个很大,它传递到服务器(这不幸的是手段再次在服务器上编写JS;当然,您可以使用运行Javascript的服务器引擎来节省自己的一些编码)。
  2. 从谷歌齿轮/ HTML5
  3. 使用背景工人

最后,如果你正在做的按需这么多的工作,也有在工作中你可能执行的速度向上的机会 - 该数据可以事先建立索引在服务器上使计算更快更简单,就像那样。但我不知道你在计算什么。

相关问题