Как справиться с предупреждением «скрипт на этой странице вызывает медленную работу Internet Explorer»? - PullRequest
7 голосов
/ 18 апреля 2011

Из JavaScript я вызываю веб-метод.В IE, если я передаю огромный параметр этому веб-методу, появляется предупреждение «Прекратить запуск этого sciprt? Сценарий на этой странице заставляет Internet Explorer работать медленно».

Можно ли обработатьнажмите кнопку «Да», чтобы, если пользователь решит отменить выполнение сценария, я смогу запустить какой-нибудь альтернативный сценарий (в этом случае мой «альтернативный» сценарий состоит в закрытии некоторой строки прогресса, которую я выскакиваю, непосредственно перед запуском сценария длительного времени)).

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

1 Ответ

4 голосов
/ 19 апреля 2011

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

Ключ состоит в том, чтобы разбить работу на относительно предсказуемые части работы (предсказуемые с точки зрения времени процессора) и запустить их на setInterval, например:

function doWork(begin, end) {
    // Some chunk of what your worker function normally does from begin to end

    if (actualEnd < end) // Nothing left to do
        clearInterval(Interval);
}

var Interval = setInterval(doWork, 15);

Это предотвращает появление приглашения IE (или Chrome не отображает диалоговое окно «Freeze»). Следующим шагом является добавление кода, который позволяет пользователю полностью его пропустить; если объем работы известен в начале, спросите их сразу. Если нет, начните обработку и после n кусков спросите их, хотели бы они выполнить более дешевую функцию.

Есть еще 2 варианта выполнения этой большой работы:

  1. Посмотрите вперед, сколько работы еще предстоит сделать, и, если это много, передайте ее на сервер (это, к сожалению, означает повторную запись вашего JS на сервер; конечно, вы можете использовать серверный движок, который работает Javascript, чтобы сэкономить немного кода).
  2. Использование фоновых рабочих из Google Gears / HTML5

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

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