Блокировка экрана на длительный скрипт - PullRequest
4 голосов
/ 17 марта 2011

У меня есть простая HTML-страница, содержащая большую таблицу с более чем 2000 строк.У меня есть код jQuery, написанный для поиска и сортировки в этой таблице.На поиск и сортировку уходит довольно много времени (что понятно).

Мне нужно иметь блокировщик экрана, когда скрипт ищет или сортирует таблицу.Такое поведение наблюдается на вызовах AJAX на многих веб-сайтах, что может быть достигнуто путем реализации событий onQap и onAjaxComplete в jQuery.

Есть ли такой метод, который можно использовать для установки блокировщика экрана для долго выполняющегося сценария.если нет, то какая альтернатива?

Ответы [ 2 ]

2 голосов
/ 17 марта 2011

Я бы порекомендовал разбить его и повторить с setTimeout.

Например, вместо:

function example1() {
    for (var i = 0; i < 1000; i++) {
        // SOME CODE
    }
}

Вы можете написать:

function example2() {
    var i = 0;
    helper();
    function helper() {
        // SOME CODE
        if (++i < 1000) {
            setTimeout(helper, 0);
        }
    }
}

Вам не нужно иметь каждую итерацию в другом обратном вызове. Вы можете преобразовать 1000 итераций в 1 вызове функции в 10 итераций на вызов функции в 100 вызовах функций или что-то более подходящее в вашем случае. Идея состоит в том, чтобы не блокировать пользовательский интерфейс так долго, чтобы пользователь это заметил.

Другой идеей было бы использовать Web Workers, если вы можете, но это не будет работать в старых браузерах (что может быть или не быть проблемой для вас, если вы пишете расширение для браузера или знаете, что будут использовать ваши пользователи) и т. д.).

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

0 голосов
/ 17 марта 2011

jQuery blockUI будет блокировать элементы или страницу и может быть очень настраиваемым.

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