Браузер зависает во время javascript eval () - PullRequest
0 голосов
/ 05 января 2010

Я использую eval () в javascript для оценки значительного количества js-кода (не только json, но и вызовов функций). Браузер зависает во время разговора, то есть пользователь не может прокрутить браузер или щелкнуть что-либо. Есть ли способ решить эту проблему?

Ответы [ 3 ]

4 голосов
/ 05 января 2010

В большинстве браузеров JavaScript выполняется в потоке пользовательского интерфейса, поэтому он блокирует пользовательский интерфейс, как вы описали. Лучший способ разблокировать пользовательский интерфейс - разбить JS на более мелкие части и связать их вместе с setTimeout (который возвращает управление потоком обратно в браузер для визуализации пользовательского интерфейса)

1 голос
/ 25 марта 2015

Вы также можете попробовать выполнить код, вставив новый тег сценария на страницу:

function executeCode(code) {
    var element = document.createElement('script');
    element.type = 'text/javascript';

    try {
        element.appendChild(document.createTextNode(code));
        document.body.appendChild(element);
    }
    catch (e) {
        element.text = code;
        document.body.appendChild(element);
    }
}

var code = 'alert("hello world");';
executeCode(code);
0 голосов
/ 05 января 2010

Вы должны разбить свою функцию на более мелкие части. Я рекомендую комбинировать их с setTimeout.

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

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