pie*_*rre 7 javascript internet-explorer cross-browser
从javascript我称之为web方法.使用IE浏览器,如果我将一个巨大的参数传递给该Web方法,则会弹出一个警告"停止运行此sciprt?此页面上的脚本导致Internet Explorer运行缓慢".
是否可以处理单击"是"按钮,这样如果用户决定取消脚本执行,我可以运行一些替代脚本(在这种情况下,我的"替代"脚本包括关闭一些进度条,我弹出只是在运行长时间脚本之前).
我已经看过许多帖子,解释了如何防止显示此警报,但我不想停止显示警报:我只是希望能够处理用户决定停止脚本执行的情况.
我之前在一个内部应用程序上处理过这个问题,他们不在乎浏览器需要多长时间来处理数字,他们只是不想点击提示。
关键是将工作分解为相对可预测的工作块(根据 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);
Run Code Online (Sandbox Code Playgroud)
这可以防止 IE 提示出现(或 Chrome 出现“冻结”对话框)。下一步是添加一些代码,让用户完全跳过它;如果一开始就知道工作量,请立即询问他们。如果没有,则开始处理,并在 n 个块之后询问他们是否愿意执行更便宜的功能。
还有另外 2 个选项可以完成这么多工作:
最后,如果您按需完成这么多工作,那么您正在执行的工作可能有加速的机会 - 可以预先在服务器上对数据进行索引,以使计算更快/更简单,诸如此类。但我不知道你在计算什么。