Dan
Dan

Reputation: 29365

Intercepting browser slow script messages

Is is possible to intercept browser messages such as:

Firefox:

A script on this page may be busy, or it may have stopped responding. You can stop the script now, open the script in the debugger, or let the script continue.

I.E.

A script on this page is causing your web browser to run slowly. If it continues to run, your computer might become unresponsive.

These messages are occuring due to the page having alot of javascript/jquery activity.

I appricate that the fact the these messages are appearing in the first place indicate a wider problem, but is there a way of intercerping this message/situation on the client side so that a more user friendly message can be shown?

Upvotes: 4

Views: 1915

Answers (2)

Ivo Wetzel
Ivo Wetzel

Reputation: 46745

No there's no way to do this, imagine a malicious user writing a script which slows down your browser until is completely unusable, now the "Slow Script" Warning may come to the rescue, but what if he could intercept it and prevent it from being shown?

You'll need to find a solution for the underlying problem, that is, in case that you're doing a lot of calculations(which I suppose you do), you need to split those of into chunks, put them into a queue and process them either asynchronously(if possible) or in order, but with a small timeout in between.

In pseudo code it may look like this:

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);

Upvotes: 6

Nick Craver
Nick Craver

Reputation: 630379

No, there is no way to intercept these messages, they are are there at a lower level in the engine to protect the user. Instead look at what's taking so long, optimize as much as possible...possibly breaking your work up into chunks that have gaps in processing so you don't trigger the messages.

Upvotes: 1

Related Questions