Как вы прерываете JS в браузере? - PullRequest
9 голосов
/ 12 марта 2012

Что эквивалентно нажатию Ctrl + C в консоли для Chrome и Firefox? При реализации различных алгоритмов я часто пишу какой-то ошибочный цикл (while), в Javascript, который не завершается, браузер зависает. Перезагрузка не работает, щелчок маленькой буквы X для закрытия вкладки ничего не делает, и через некоторое время (буквально) у меня не хватает памяти, система перезагружается, и я ухожу на кофе-брейк.

Ответы [ 4 ]

6 голосов
/ 12 марта 2012

Не существует такого понятия, как Ctrl + C для JavaScript.Браузеры, выполняющие JavaScript, обычно защищают себя.Если какой-либо JavaScript зависнет, он выдаст диалоговое окно с вопросом, хочет ли пользователь остановить JavaScript.

Время ожидания обычно можно найти в настройках браузера.Вы можете найти, как сделать это для FireFox здесь: http://www.trixya.net/index.php/internet/how-to-set-javascript-timeout-in-firefox

6 голосов
/ 12 марта 2012

В Chrome вы можете нажать Shift+ESC (или щелкнуть правой кнопкой мыши строку заголовка и открыть диспетчер задач Chrome) и завершить процесс, связанный с зависшей вкладкой. Это будет работать в тех случаях, когда закрытие вкладки не будет.

Предупреждение: иногда Chrome упорядочивает несколько вкладок в одном процессе, и это убивает все вкладки, связанные с процессом.


Другой подход, который вы можете предпринять, чтобы избежать зависания браузера while, - это написать код, подобный этому (вы можете удалить его после тестирования):

var maxIterations = 100000; 
while (foo) {
    if (!maxIterations--) throw new Error('Max iterations hit, aborting.');
    // do stuff
}

Щелкните правой кнопкой мыши в диспетчере задач Chrome и выберите элемент в нижней части контекстного меню, чтобы открыть странное пасхальное яйцо.

1 голос
/ 12 марта 2012

Из того небольшого понимания, которое у меня есть в отношении ваших методов работы, я бы поступил следующим образом:

  • Выполнять сценарий только при событии, таком как нажатие кнопки.Это предотвратит запуск скрипта onload
  • Chrome позволяет вам установить точки останова в вашем коде js на вкладке скриптов инструментов разработчика
0 голосов
/ 12 марта 2012

Нет реального «прерывателя» для запуска кода Javascript в браузере. ECMAscript выполняется в так называемом «потоке пользовательского интерфейса», что означает, что все элементы рендеринга происходят в той же очереди, в которой выполняется код ECMAscript.

Это, в свою очередь, означает, что бесконечный цикл в ECMAscript автоматически приводит к зависанию всего взаимодействия браузеров.

Единственный способ избежать этого - писать чистый, чистый код. Если это все равно происходит, большинство браузеров понимают, что поток пользовательского интерфейса слишком долго занят, и спрашивает пользователя, хочет ли он отменить запущенные процессы javascript. Если вы не хотите ждать этого, ваш единственный выбор - убить весь процесс браузера / вкладки.

Однако, если вы знаете, что некоторая часть вашего скрипта может вызвать бесконечный цикл, вы можете либо вручную установить breakpoints в каком-то виде developer tools, либо вставить ключевое слово debugger; непосредственно в ваш скрипт , Это приводит к остановке интерпретатора javascript в текущей строке, и у вас есть возможность проанализировать следующий код (например, условия) и отменить выполнение, если оно выглядит плохо.

...