Максимальное время выполнения для JavaScript - PullRequest
10 голосов
/ 13 июня 2010

Я знаю, что как ie, так и firefox имеют ограничения для выполнения JavaScript ( Источник 1 , Источник 2 ). Основываясь на количестве выполненных операторов, я слышал, что в IE где-то 5 миллионов, а в Firefox - количество секунд: по умолчанию для моей версии это 10 секунд.

Я не понимаю, какие дела превысят эти пределы:

  1. Я уверен, что гигантский цикл превысит лимит времени исполнения

  2. Но перестанет ли обработчик событий превышать лимит, если само его время выполнения будет ниже лимита, но если оно происходит несколько раз?

Пример:

Допустим, у меня есть таймер на моей странице, который выполняет некоторый JavaScript каждые 20 секунд. Время выполнения для обработчика таймера составляет 1 секунду. Обрабатывает ли firefox и т. Д. Каждый вызов функции таймера отдельно, чтобы он никогда не превышал ограничение, или же firefox / ie суммирует время каждого вызова так, после того, как обработчик завершается, то есть через 200 секунд на моем сайте (с таймер вызывается 10 раз) возникает ошибка, хотя сам обработчик таймера длится всего 1 секунду?

Ответы [ 3 ]

8 голосов
/ 13 июня 2010

В следующей статье Николас С. Закас обсуждается, как и когда разные браузеры прерывают длительный код JavaScript:

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

С другой стороны, веб-работники больше подойдут для длительной обработки, поскольку их выполнение происходит в отдельном процессе и поэтому не блокирует поток пользовательского интерфейса:

Однако веб-работники пока не поддерживаются в Internet Explorer, и у них не будет доступа к DOM.

1 голос
/ 13 июня 2010

Обработчик событий считается новым контекстом выполнения - ограничение по времени сбрасывается.

Если вам нужно еще больше вычислений, взгляните на WebWorkers.

0 голосов
/ 02 августа 2011

Я тоже застрял в такой ошибке JS. Я также получил решение, к сожалению, только для IE, которое говорит, что нужно отредактировать реестр (команда regedit) и обновить количество разрешенных JS-команд. Подробнее здесь http://support.microsoft.com/?kbid=175500.

Но это не кажется мне хорошим решением. Bcoz. Если вы разрабатываете веб-приложение, вы не можете попросить каждого пользователя использовать только IE и обновить его системный реестр.

В качестве обходного пути: если ваши данные для обработки на стороне клиента действительно велики, вы можете добавить некоторые ручные задержки между фиксированным набором обработки событий. Например Если в любой задаче вы хотите обработать 100 событий, вы можете разбить их на 10 наборов по 100 и обработать каждый из них, скажем, за 100 мс. Чтобы узнать, как это сделать, перейдите по ссылке ниже:

http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...