javascript - 如何处理 "a script on this page is causing internet explorer to run slowly"警报?

标签 javascript internet-explorer cross-browser

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

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

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

最佳答案

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

关键是将工作分解成相对可预测的工作 block (在 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 个 block 之后询问他们是否愿意执行更便宜的功能。

还有 2 个其他选项可以完成这么多工作:

  1. 向前看有多少工作要做,如果很多,将它传递给服务器(不幸的是,这意味着在服务器上再次编写你的 JS;当然,你可以使用运行的服务器引擎Javascript 来为自己节省一些代码)。
  2. 使用来自 Google Gears/HTML5 的后台 worker

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

关于javascript - 如何处理 "a script on this page is causing internet explorer to run slowly"警报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5700254/

相关文章:

javascript - 多个自定义 Vimeo 播放按钮

php - 使用 javascript 更改表单操作

internet-explorer - IE8 中的弯 Angular ?

css - IE 网站内容仅显示在浏览器可见区域

html - 最大宽度标签不适用于 IE

javascript - 在多维数组javascript或coffeescript中获取最大值

javascript - 如果数据库中的值为 true,则如何设置复选框,如果在 angularJS 中编辑时值为 false,则如何取消选中

html - 跨浏览器兼容性 : Get Chrome overflow ellipsis behavior in Firefox

javascript - 使用 javascript 处理跨浏览器功能

javascript - 阻止 Chrome 中的默认 'ctrl pageup' 和 'ctrl pagedown'