Wie unterbrichst du JS im Browser?

8

Was entspricht dem Drücken von Strg + C in der Konsole für Chrome und Firefox? Während ich verschiedene Algorithmen implementiere, schreibe ich oft eine Buggy-Schleife ( while ), die in Javascript, die nicht beendet wird, den Browser einfriert. Neuladen funktioniert nicht, klicken Sie auf kleines X zum Schließen der Registerkarte tut nichts, und nach einer Weile (buchstäblich) bin ich aus dem Speicher, System wechselt, und ich gehe für eine Kaffeepause.

    
skrat 11.03.2012, 22:20
quelle

4 Antworten

5

Es gibt keine Ctrl + C für JavaScript. Die Browser, die JavaScript ausführen, schützen sich normalerweise selbst. Wenn JavaScript nicht mehr reagiert, wird ein Dialogfeld ausgelöst, in dem Sie gefragt werden, ob der Benutzer das JavaScript stoppen möchte.

Die Zeitüberschreitung kann normalerweise in den Einstellungen des Browsers gefunden werden. Sie können finden, wie man es für FireFox hier tut: Ссылка

    
ming_codes 11.03.2012, 22:26
quelle
5

In Chrome können Sie Shift+ESC drücken (oder mit der rechten Maustaste auf die Titelleiste klicken und den Chrome-Aufgabenmanager öffnen) und den Prozess beenden, der mit der aufgehängten Registerkarte verknüpft ist. Dies funktioniert in Fällen, in denen das Schließen der Registerkarte nicht möglich wäre.

Der Nachteil ist, dass Chrome manchmal mehrere Tabs in einen Prozess strafft und dadurch alle mit dem Prozess verbundenen Tabs abbricht.

Ein weiterer Ansatz, den Sie anwenden können, um while loops zu vermeiden, indem Sie den Browser hängen, besteht darin, Code wie diesen zu schreiben (Sie können ihn nach dem Testen entfernen):

%Vor%

Klicken Sie mit der rechten Maustaste in den Task-Manager von Chrome und wählen Sie das Element am unteren Rand des Kontextmenüs aus, um ein seltsames Osterei anzuzeigen.

    
Dagg Nabbit 11.03.2012 22:22
quelle
1

Von dem kleinen Einblick, den ich in Ihre Arbeitsweisen habe, wie ich fortfahren würde ist:

  • Führen Sie das Skript nur bei einem Ereignis wie einem Klick auf die Schaltfläche aus. Dies würde verhindern, dass das Skript onload ausführt.
  • In Chrome können Sie Unterbrechungspunkte in Ihrem js -Code auf der Registerkarte "Skripts" der Entwicklertools
  • festlegen
bPratik 11.03.2012 22:25
quelle
0

Es gibt keinen echten "Unterbrecher", um Javascript in einem Browser auszuführen. ECMAscript wird im so genannten "UI-Thread" ausgeführt, was bedeutet, dass alle Rendering-Objekte in derselben Warteschlange ausgeführt werden, in der der ECMAscript-Code ausgeführt wird.

Das bedeutet wiederum, dass eine Endlosschleife in ECMAscript automatisch die gesamte Browser-Interaktion aufhängt.

Der einzige Weg, dies zu vermeiden, ist klaren, sauberen Code zu schreiben. Wenn es dennoch passiert, merken die meisten Browser, dass der UI-Thread zu lange beschäftigt ist und fragen den Benutzer, ob er die laufenden Javascript-Prozesse abbrechen möchte. Wenn Sie nicht darauf warten wollen, müssen Sie nur den gesamten Browser / Tab-Prozess beenden.

Wenn Sie jedoch wissen, dass ein Teil Ihres Skripts möglicherweise eine Endlosschleife verursacht, können Sie entweder breakpoints manuell in einer Art developer tools setzen oder Sie können das Schlüsselwort debugger; direkt in Ihr Skript einfügen . Das bewirkt, dass der Javascript-Interpreter bei der aktuellen Zeile anhält und Sie haben die Möglichkeit, den nächsten Code zu analysieren (während Bedingungen für die Instanz) und die Ausführung abzubrechen, wenn sie schlecht aussieht.

    
jAndy 11.03.2012 22:27
quelle