2010-11-18 5 views
4

Ist ist möglich, Browser-Nachrichten wie abfangen:Intercepting Browser langsam Skript Nachrichten

Firefox:

Ein Skript auf dieser Seite beschäftigt sein können, oder es möglicherweise nicht mehr reagiert. Sie können das Skript jetzt stoppen, öffnen Sie das Skript im Debugger, oder lassen Sie das Skript weiter.

I.E.

Ein Skript auf dieser Seite verursacht, dass Ihr Webbrowser langsam ausgeführt wird. Wenn es weiterhin ausgeführt wird, reagiert Ihr Computer möglicherweise nicht mehr .

Diese Meldungen treten auf, weil die Seite viel Javascript/jquery-Aktivität hat.

Ich schätze, dass die Tatsache, dass diese Nachrichten an erster Stelle erscheinen, ein größeres Problem anzeigen, aber gibt es eine Möglichkeit, diese Nachricht/Situation auf der Client-Seite zu intercieren, so dass eine benutzerfreundlichere Nachricht angezeigt werden kann?

Antwort

6

Nein, es gibt keine Möglichkeit, dies zu tun, stellen Sie sich einen böswilligen Benutzer ein Skript schreiben, die Ihren Browser verlangsamt, bis vollständig unbrauchbar ist, jetzt die "Slow Script" Warnung kann zu Hilfe kommen, aber was ist, wenn er abfangen konnte und verhindern, dass es gezeigt wird?

Sie müssen eine Lösung für das zugrundeliegende Problem finden, das heißt, wenn Sie eine Menge Berechnungen durchführen (was ich denke, Sie tun), müssen Sie diese in Stücke teilen, setzen Sie sie in eine Warteschlange und verarbeiten sie entweder asynchron (wenn möglich) oder in der Reihenfolge, aber mit einem kleinen Timeout dazwischen.

In Pseudo-Code, um es so aussehen kann:

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

Danke für den Code Ivo – Dan

1

Nein, es gibt keine Möglichkeit, diese Meldungen abzufangen, sie befinden sich auf einer niedrigeren Ebene in der Engine, um den Benutzer zu schützen. Schauen Sie sich stattdessen an, was so lange dauert, optimieren Sie so viel wie möglich ... und brechen Sie Ihre Arbeit möglicherweise in Stücke auf, die Verarbeitungslücken aufweisen, sodass Sie die Nachrichten nicht auslösen.

+0

Dank Nick, macht Sinn. Weißt du genau, warum diese Nachricht erscheint? Sind es nur Skripte, die zu lange dauern, um auszuführen, wie Sie angeben, nicht mit Speicher zu tun? – Dan

+0

@Dan - Es gibt Grenzen, variieren sie pro Browser, ich denke in IE zum Beispiel ist es XXX Operationen, gibt es auch Speicher Grenzen ... nur nicht sicher von den Zahlen, sie variieren wahrscheinlich auch pro Version des Browsers. –