【问题标题】:How to handle the "a script on this page is causing internet explorer to run slowly" alert?如何处理“此页面上的脚本导致 Internet Explorer 运行缓慢”警报?
【发布时间】:2011-08-07 16:48:23
【问题描述】:

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

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

我看到很多帖子解释了如何防止显示此警报,但我不想停止显示警报:我只想能够处理用户决定停止显示的情况脚本执行。

【问题讨论】:

  • 你可以有一个单独的函数来定期检查工作是否真的在继续
  • 在标准 JS 中你实际上做不到;工作以单线程方式同步执行,因此在第一个函数完成之前不会运行单独的函数,这为时已晚。

标签: javascript internet-explorer cross-browser


【解决方案1】:

我之前在一个内部应用程序上处理过这个问题,他们并不关心浏览器处理数字需要多长时间,他们只是不想点击提示。

关键是将工作分解成相对可预测的工作块(根据 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. 使用来自 Google Gears/HTML5 的后台工作人员

最后,如果您是按需完成这么多工作,那么您正在执行的工作可能会有加速的机会 - 可以预先在服务器上对数据进行索引,以使计算更快/更简单,诸如此类.但我不知道你在计算什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    相关资源
    最近更新 更多