Чтобы избежать диалога "скрипт слишком длинный", нужно ли разделить свою функцию и запускать ее через определенные промежутки времени?

У меня есть очень большой JavasScript для цикла, работающего на одной из моих страниц. Он настолько велик, что в старых версиях он вызывает всплывающее окно IE, которое говорит что-то вроде: "Скрипт этой страницы заставляет его работать медленно, вы хотите прекратить его?"

Я уверен, что максимально оптимизировал его, поэтому сейчас я ищу альтернативные способы сделать это.

Мне интересно, было бы полезно для меня создать интервал, который запускает первые 100 итераций, затем вторые 100 итераций, затем третью и т. Д., Пока все итерации не будут завершены? Это предотвратит всплывающее окно IE, утверждающее, что скрипты работают слишком медленно?

3 ответа

Решение

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

С помощью setTimeout как вы предлагаете в вопросе, запускать вычисления в пакетах действительно предотвратит появление всплывающего окна.

Периодическое возвращение к циклу событий также позволит браузеру реагировать на другие события пользовательского интерфейса - вы можете (например) предложить кнопку "Отмена". Я бы посоветовал вам попытаться уступить хотя бы раз в секунду, если не несколько чаще.

Вы можете использовать это: многопоточность. это не многопоточность, это просто игра с таймерами. Это предотвратит всплывающее окно. Но я не уверен, если это необходимо в этом случае, если вы не делаете полноценную игру.

Javascript является однопоточным, так что это главное препятствие.

Если вы хотите выполнить много вычислений, желательно использовать Workers, однако они поддерживаются только современными браузерами. Это так, чтобы ваши вычисления не замедляли работу пользовательского интерфейса, который должен быть в основном потоке. Это обычная практика при создании настольных приложений.

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

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

Другие вопросы по тегам