2010-04-21 2 views
9

Я получаю сообщение об ошибке из Firefox «Unresponsive script». Эта ошибка связана с некоторыми javascript, которые я добавил на свою страницу.Javascript: безответственная ошибка скрипта

Мне было интересно, вызвана ли реакция не только контурами кода (функция, вызывающая друг друга циклически или бесконечно для циклов) или могут быть другие причины?

Не могли бы вы помочь мне отладить такие ошибки?

благодаря

+0

Что именно вы спрашиваете? – SLaks

+1

Если ваш код ожидает обратного вызова AJAX и что длительное время также может быть причиной. – Kasturi

+1

Получите Firebug и узнайте, как его использовать. Затем вы можете отлаживать ошибки, подобные этим для себя. – Robusto

ответ

8

Согласно Mozzila Knoledgebase:

Когда JavaScript код работает дольше, чем заранее определенный промежуток времени, Firefox будет отображать диалоговое окно, которое говорит Внимание: выполнение скрипта. Это время задается настройками dom.max_script_run_time и dom.max_chrome_script_run_time. Увеличение значений этих настроек приведет к тому, что предупреждение будет появляться реже, но победит цель: сообщить о проблеме с расширением или веб-сайтом, чтобы остановить сценарий бегства.

Кроме того:

найти источник проблемы

Чтобы определить, что скрипт работает слишком долго, нажмите кнопку Stop Script в диалоговом окне предупреждения, затем перейдите в меню Сервис | Консоль ошибок. Самые последние ошибки в консоли ошибок должны идентифицировать сценарий, вызывающий проблему.

Проверка пульта ошибок должна сделать довольно очевидным, какая часть вашего javascript вызывает проблему. Оттуда либо удалите оскорбительный фрагмент кода, либо измените его таким образом, чтобы он не был таким ресурсоемким.

EDIT: Как уже упоминалось в комментариях к автору темы, Firebug настоятельно рекомендуется для отладки проблем с javascript. Jonathan Snook имеет полезное видео по использованию точек останова для отладки сложных фрагментов javascript.

9

Один из способов избежать этого, чтобы обернуть вашу бедную производительную часть кода с тайм-аут, как это:

setTimeout(function() { 
// <YOUR TIME CONSUMING OPERATION GOES HERE> 
}, 0); 

Это не пуленепробиваемые решение, но оно может решить проблему в некоторых случаях.

+1

Обычно тяжелая задача находится в цикле for. Для пошагового описания того, как преобразовать цикл for с тяжелой задачей в структуру, которая систематически передает управление обратно в браузер, см. Здесь: http://stackoverflow.com/questions/4460263/disabling-the-long- приработки скрипт-сообщение-в-интернет-исследователь/11619030 # 11619030 –

1
  1. там может быть бесконечный цикл где-то в коде
    • запуска закомментировав коды, чтобы определить, какой раздел является причиной его
    • слишком много циклов: может возникнуть вероятность того, что ваше имя переменной счетчика столкнется, заставив переменную сохранять сброс, вызывая бесконечный цикл.
  2. пытается как можно больше, чтобы создать хэш для ваших объектов, так много, что время чтения является O (1) и в кэшировании образом эти данные
  3. избегает использования js libs как некоторые из методов могут вызвать накладные расходы. например. .htm() против .innerHTML
  4. SetTimeout() да, и нет - зависит от того, как вы chunkify ваших кодов
4

Нам необходимо выполнить следующие шаги, чтобы остановить скрипт в Firefox.

Шаг 1 Запуск Mozilla Firefox.

Шаг 2 Щелкните в любом месте адресной строки в верхней части окна Firefox, чтобы выделить все поле.

Шаг 3 Введите «about: config» (оставьте здесь кавычки и все) и нажмите «Enter». A "Это может лишить вас гарантии!" может появиться предупреждающее сообщение; если это произойдет, нажмите «Я буду осторожен, я обещаю!» чтобы открыть страницу, содержащую все настройки Firefox.

Шаг 4 Нажмите один раз в поле «Поиск» в верхней части страницы и введите «dom.max_script_run_time». Настройка находится и отображается; оно имеет значение по умолчанию 10.

Шаг 5 Дважды щелкните по значку, чтобы открыть окно Enter Integer Value.

Шаг 6 Введите «0» и нажмите «ОК», чтобы установить значение в ноль. Скрипты Firefox теперь работают неограниченно и не будут вызывать ошибок скрипта. Этап 7

Restart Mozilla Firefox.

Смежные вопросы