Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Остановить выполнения сценария? компьютер может перестать реагировать 
:(
    Опции темы
Сisa
Дата 28.8.2014, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Остановить выполнение сценария?
Сценарий на этой веб-странице замедляет работу IE.
и т.д. ...

 
 Такое сообщение иногда можно видеть для своего скрипта, вопрос в том как избежать подобного, не теряя при этом функциональность самого скрипта?
 Это не window.onerror = null; это система притормаживает.
 Отвечая "продолжить" работа скрипта завершается с отличным результатом, да и само такое сообщение не всегда выскакивает, примерно в половине случаев при тестировании, но для сайта ведь эти сообщения просто недопустимы.



Это сообщение отредактировал(а) Сisa - 28.8.2014, 09:47
PM MAIL   Вверх
Aliance
Дата 28.8.2014, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Скорее всего поможет простой рефакторинг кода. while (i++ < 1000000000) - допустимый код, но тормозить браузер он будет.
PM MAIL WWW ICQ Skype   Вверх
Сisa
Дата 28.8.2014, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Рефакторинг: 
признаки плохого кода - посмотрел перечень как бы не очень подходит в моем скрипте,
методы - интересно, но уж больно серьезно,
программы - как бы ими воспользоваться...


PM MAIL   Вверх
Сisa
Дата 28.8.2014, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Chrome и FF отлично справляются и не тормозят расчеты, даже если сложность их вычисления изначально увеличить (точность, размерность, количество) более чем в 10 раз. IE8 - виноват, потому что IE! Похоже рефакторинг ему что ..  припарка. 
PM MAIL   Вверх
Aliance
Дата 29.8.2014, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Зависит от кода. Без него - только пальцем в небо. Существует масса хаков именно для ИЕ, так что однозначно крест на нем ставить не стоит.
PM MAIL WWW ICQ Skype   Вверх
AVA12
Дата 29.8.2014, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 4.5.2008

Репутация: 2
Всего: 4



Насколько я понял, речь идет о тяжелых и длительных расчетах, выполняющихся "в один прием". Вообще так делать некрасиво: из-за однопоточности интерпретатора яваскрипта такой расчет блокирует обработку других событий (если они есть). Лучше разбить задачу на небольшие части, хранить текущее состояние расчетов в глобальной переменной и вынести расчеты в отдельную функцию. Если после обработки очередной части расчет еще не завершен, то функция сохраняет промежуточный итог и устанавливает короткий таймаут, который вызывает эту же функцию. Тогда у гипотетических событий будет шанс отработать без лишних задержек, и браузер перестанет ругаться.
PM ICQ Jabber   Вверх
Сisa
Дата 29.8.2014, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Короткий таймаут скорее всего очень полезная будет штука, не в этот раз так в следующий. Хочу уяснить такую деталь:
 "Если после обработки очередной части расчет еще не завершен, то функция сохраняет промежуточный итог и устанавливает короткий таймаут..." - этот таймаут происходит автоматически? т.е. перед вызовом очередной js функции, операционная система может перехватывать управление и выполнять какие то свои иные неотложные задачи? Или же надо сеттаймеаут писать самому? 
 Если сеттаймеаут, то время конечно можно писать минимальное 10-12, и тем не менее суммарное время выполнения всего скрипта вырастет, но зато не будет проблем с IE.

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

Это сообщение отредактировал(а) Сisa - 29.8.2014, 15:27
PM MAIL   Вверх
AVA12
Дата 29.8.2014, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 4.5.2008

Репутация: 2
Всего: 4



Цитата
этот таймаут происходит автоматически? т.е. перед вызовом очередной js функции, операционная система может перехватывать управление и выполнять какие то свои иные неотложные задачи? Или же надо сеттаймеаут писать самому?

Нужно писать самому. Просто добавить setTimeout() в обработчике.

Интерпретатор никак не может прервать обработчик события (тело тега <script> - это, фактически, текст обработчика события "на странице опять встретился яваскрипт"). Только когда обработчик завершился, интерпретатор выбирает из очереди следующее событие и вызывает его обработчик. И только если очередь событий пуста, интерпретатор проверяет, есть ли "просроченные" таймеры, и вызывает их обработчики.
PM ICQ Jabber   Вверх
Сisa
Дата 30.8.2014, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



AVA12, спасибо!

Это сообщение отредактировал(а) Сisa - 31.8.2014, 21:33
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.