Javascript 拦截浏览器慢速脚本消息

Javascript 拦截浏览器慢速脚本消息,javascript,jquery,browser,client-side,Javascript,Jquery,Browser,Client Side,可以截获浏览器消息,例如: 火狐: 此页上的脚本可能正忙,或者 它可能已经停止响应。你 如果现在可以停止脚本,请打开 脚本,或者让 脚本继续 即 此页上的脚本正在导致 web浏览器运行缓慢。如果是 如果继续运行,您的计算机可能会 变得没有反应 出现这些消息的原因是页面具有大量javascript/jquery活动 我了解到,这些消息首先出现的事实表明存在更广泛的问题,但是否有办法在客户端插入此消息/情况,以便显示更友好的消息?不,没有办法截获这些消息,它们位于引擎的较低级别,以保护用户。相反,看

可以截获浏览器消息,例如:

火狐:

此页上的脚本可能正忙,或者 它可能已经停止响应。你 如果现在可以停止脚本,请打开 脚本,或者让 脚本继续

此页上的脚本正在导致 web浏览器运行缓慢。如果是 如果继续运行,您的计算机可能会 变得没有反应

出现这些消息的原因是页面具有大量javascript/jquery活动


我了解到,这些消息首先出现的事实表明存在更广泛的问题,但是否有办法在客户端插入此消息/情况,以便显示更友好的消息?

不,没有办法截获这些消息,它们位于引擎的较低级别,以保护用户。相反,看看是什么花费了这么长的时间,尽可能地优化…可能会将您的工作分解成在处理过程中有间隙的块,这样您就不会触发消息。

不,没有办法做到这一点,想象一个恶意用户编写一个脚本,使您的浏览器速度减慢,直到完全无法使用为止,现在称为“慢脚本”警告可能会出现在救援中,但如果他能够拦截并阻止它被显示呢

您需要找到解决潜在问题的方法,也就是说,如果您正在进行大量计算(我想您是这样做的),那么您需要将这些计算拆分为块,将它们放入队列中,并异步(如果可能)或按顺序处理它们,但中间有一个小的超时

在伪代码中,它可能如下所示:

var queue = []; // put your functions or the data in here
function() processQueue{
    if (queue.length > 0) {
        var item = queue.shift() // pop of the first item of the queue
        item(); // call the function, or in case of data pass it to th processing function
        setTimeout(processQueue, 100); // wait 100 ms before processing the next chunck
    }
}

setTimeout(processQueue, 0);

谢谢,尼克,有道理。你知道这条消息出现的确切原因吗?这纯粹是因为脚本执行时间太长,而不是内存问题吗?@Dan-有限制,每个浏览器都有不同,我认为IE中的XXX操作也有内存限制……只是不确定数字,可能每个浏览器版本也有不同。